Biểu thức nào không phải là biểu thức chính quy?
Trả lời:
Đáp án đúng: B
Biểu thức chính quy (Regular Expression) là một chuỗi ký tự đặc biệt dùng để mô tả một tập hợp các chuỗi khác, theo một cú pháp nhất định. Các phép toán cơ bản trong biểu thức chính quy bao gồm: phép hợp (union), phép nối (concatenation), và phép lặp (Kleene star).
Phương án A: `[(a+b)*-(aa+bb)]*` - Có vẻ như có sử dụng ký tự '-' không đúng cách trong biểu thức chính quy. Dấu '-' thường không được sử dụng trực tiếp như một toán tử trong biểu thức chính quy theo nghĩa này. Tuy nhiên, cần xem xét ngữ cảnh cụ thể để xác định chính xác. Giả sử '-' là một ký tự literal, biểu thức có thể đúng.
Phương án B: `[(0+1)-(0b+a1)*(a+b)]*` - Tương tự như phương án A, sự xuất hiện của '-' và các ký tự 'b', 'a' có thể không phù hợp nếu không được định nghĩa trước hoặc sử dụng đúng cách. Nếu 'b' và 'a' là ký tự trong bảng chữ cái, biểu thức có thể đúng nếu '-' là một ký tự literal. Tuy nhiên, cách sử dụng này không phổ biến.
Phương án C: `(01+11+10)*` - Đây là một biểu thức chính quy hợp lệ. Nó mô tả một chuỗi bao gồm các chuỗi con "01", "11", hoặc "10", lặp lại không hoặc nhiều lần.
Phương án D: `(1+2+0)*(1+2)*` - Đây là một biểu thức chính quy hợp lệ. Nó mô tả một chuỗi bao gồm các ký tự "1", "2", hoặc "0", lặp lại không hoặc nhiều lần, sau đó là các ký tự "1" hoặc "2" lặp lại không hoặc nhiều lần.
Trong các phương án trên, phương án B có vẻ không phải là một biểu thức chính quy chuẩn do sự xuất hiện của các ký tự 'b' và 'a1' mà không có định nghĩa rõ ràng về chúng trong ngữ cảnh biểu thức chính quy thông thường, cũng như cách sử dụng dấu '-'. Tuy nhiên, phương án A cũng gây tranh cãi.
Vì câu hỏi yêu cầu chọn biểu thức *không* phải là biểu thức chính quy, phương án B phù hợp hơn do cách sử dụng các ký tự và toán tử không chuẩn.