2010-05-25 28 views
6

Có thể phát hiện xem một chuỗi đã cho có biểu thức chính quy hợp lệ hay không, chỉ sử dụng các biểu thức chính quy?Có thể có regexp phù hợp với tất cả các biểu thức chính quy hợp lệ không?

Giả sử tôi có một số chuỗi, có thể hoặc không phải là cụm từ thông dụng hợp lệ. Tôi muốn có một biểu thức chính quy phù hợp với những chuỗi tương ứng với biểu thức chính quy hợp lệ. Điều đó có thể không? Hay tôi có sử dụng một số ngữ pháp cấp cao hơn (tức là ngữ cảnh tự do ngữ cảnh) để phát hiện điều này? Nó có ảnh hưởng đến việc tôi đang sử dụng một số phiên bản mở rộng của regexps như Perl regexps không?

Nếu có thể, regexp đối sánh regexp là gì?

+0

thể trùng lặp của [Có một biểu hiện thường xuyên để phát hiện một biểu thức chính quy hợp lệ?] (http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid-regular-expression) – outis

Trả lời

8

Không, điều đó là không thể. Điều này là do các biểu thức chính quy hợp lệ liên quan đến việc nhóm, yêu cầu các dấu ngoặc đơn cân bằng.

Dấu phân cách cân bằng không thể khớp với cụm từ thông dụng; thay vào đó, chúng phải được đối sánh với context-free grammar. (Các first example trên mà giao dịch bài viết với dấu ngoặc đơn cân bằng.)

+0

Ok, điều đó đúng với các biểu thức chính quy thông thường Làm thế nào về một cái gì đó giống như Perl regex? –

+0

@ Juha Syrjälä: Trên thực tế, tôi đã suy nghĩ về Perl regexes cụ thể.Các dấu ngoặc đơn nhóm không thể được xuất hiện với một regex, như tôi đã giải thích –

+0

PCRE và .NET mở rộng biểu thức thông thường để cũng phù hợp với cân bằng Perl 6 mở rộng các regex với các quy tắc cũng cho phép điều này. Nhưng bây giờ mô tả "cụm từ thông dụng" không còn chính xác nữa. Trong thực tế, hầu hết những gì ngày nay được hiểu bởi "biểu thức chính quy" không còn thường xuyên nữa. –

0

Nếu câu hỏi của bạn đã "khớp với tất cả các cụm từ thông dụng hợp lệ", câu trả lời là (có thể đáng ngạc nhiên) 'có'. Biểu thức chính quy .* khớp với tất cả các biểu thức thông thường hợp lệ (và không hợp lệ), nhưng khá vô dụng để xác định xem bạn có đang xem một biểu thức hợp lệ hay không.

Tuy nhiên, như câu hỏi là "phù hợp với tất cả và chỉ biểu thức thông thường có giá trị", câu trả lời là (như DVK và Platinum Azure" đã nói 'không'.

Các vấn đề liên quan