Không có ngày nào trên SO trôi qua mà không có câu hỏi về phân tích cú pháp (X) HTML hoặc XML với các biểu thức chính quy được hỏi.
Mặc dù tương đối dễ dàng để đưa ra các ví dụ chứng minh tính không khả thi của regex cho nhiệm vụ này hoặc với một bộ sưu tập các biểu thức để đại diện cho khái niệm, tôi vẫn không thể tìm thấy trên SO một lời giải thích chính thức về lý do tại sao điều này không thể được thực hiện trong điều kiện.
Những lời giải thích chính thức duy nhất mà tôi có thể tìm thấy cho đến nay trên trang web này có lẽ cực kỳ chính xác, nhưng cũng khá khó hiểu đối với lập trình viên tự học:
lỗ hổng ở đây là HTML là ngữ pháp Chomsky Loại 2 (ngữ pháp không có ngữ cảnh) và RegEx là ngữ pháp Chomsky Loại 3 (biểu thức chính quy)
hoặc là:
Biểu thức chính quy chỉ có thể khớp với ngôn ngữ thông thường nhưng HTML là ngôn ngữ không có ngữ cảnh.
hoặc là:
Một ô tô tự động hữu hạn (là cấu trúc dữ liệu bên dưới một biểu thức chính quy) không có bộ nhớ ngoài trạng thái của nó và nếu bạn có lồng ghép sâu tùy ý, bạn cần một ô tô tự động lớn tùy ý, điều này mâu thuẫn với khái niệm về một ô tô tự động hữu hạn.
hoặc là:
Bổ đề Pumping cho các ngôn ngữ thông thường là lý do tại sao bạn không thể làm điều đó.
[Công bằng mà nói: phần lớn phần giải thích ở trên liên kết đến các trang wikipedia, nhưng những phần này không dễ hiểu hơn chính câu trả lời].
Vì vậy, câu hỏi của tôi là: ai đó có thể vui lòng cung cấp bản dịch theo thuật ngữ của giáo dân về các giải thích chính thức được đưa ra ở trên về lý do tại sao không thể sử dụng regex để phân tích cú pháp (X) HTML / XML không?
CHỈNH SỬA: Sau khi đọc câu trả lời đầu tiên, tôi nghĩ rằng mình nên làm rõ: Tôi đang tìm kiếm một "bản dịch" cũng giải thích ngắn gọn các khái niệm mà nó cố gắng dịch: ở cuối câu trả lời, người đọc nên có một ý tưởng sơ bộ - ví dụ: - "ngôn ngữ thông thường" và "ngữ pháp không theo ngữ cảnh" nghĩa là gì ...