Biểu cảm của biểu thức chính quy hiện đại


9

Gần đây tôi đã thảo luận với một người bạn về một trang web đề xuất các thách thức regex, chủ yếu khớp một nhóm từ với một thuộc tính đặc biệt. Anh ta đang tìm kiếm một regex khớp với các chuỗi như ||||||||số lượng số |nguyên tố. Tôi lập tức nói với ông rằng sẽ không bao giờ làm việc bởi vì nếu một ngôn ngữ như vậy là bình thường, bản dịch của bơm Bổ đề sẽ đưa ra một thực tế rằng đối với một số nguyên tố đủ lớn, nó tồn tại k pp + n k là số nguyên tố cho tất cả n - 1 , và điều này hoàn toàn không phải là trường hợp (phân chia lại các số nguyên tố, tầm thường của một tài sản không xác định và nghiền nát như vậy, ...)pkpp+nkn1

Nhưng sau đó một người nào đó đi kèm với giải pháp: không phù hợp với (||+?)\1+ biểu hiện này cố gắng để phù hợp với nhóm chụp (có thể được ||, |||, ||||và vân vân của lần xuất hiện của ) n 2 lần. Nếu nó khớp, có nghĩa là số được biểu thị bằng chuỗi chia hết cho k và do đó không phải là số nguyên tố. Nếu không, nó là.k2|n2k

Và tôi cảm thấy thật ngu ngốc, vì rõ ràng việc phân nhóm và phản hồi cho phép regex thực sự biểu cảm hơn rất nhiều so với ... biểu thức thông thường, theo nghĩa lý thuyết. Bây giờ họ thậm chí đã thêm giao diện và các toán tử khác mà tôi không biết khi tôi sử dụng regex thực sự.

Theo Wikipedia, thậm chí còn có ý nghĩa hơn khi các ngôn ngữ được tạo ra bởi một ngữ pháp không ngữ cảnh. Vì vậy, đây là câu hỏi của tôi :

  • chúng ta có thể biểu diễn bất kỳ ngôn ngữ đại số nào (được tạo ra từ ngữ pháp không ngữ cảnh) với các công cụ biểu thức chính quy hiện đại không
  • Có một mô tả tổng quát hơn, hoặc ít nhất là một giới hạn trên về sự phức tạp của loại ngôn ngữ nào có thể được mô tả bởi một biểu thức hiện đại?

Thực tế hơn, có bất kỳ lý thuyết nghiêm túc nào đằng sau nó hay chúng ta chỉ thêm bất kỳ tính năng mới nào mỗi khi nó xuất hiện với khối biểu thức chính quy thực sự ban đầu dựa trên automata hữu hạn?

Tôi biết rằng "regex hiện đại" không cụ thể lắm trong khi câu hỏi là vậy, nhưng ý tôi là ít nhất là với các phản hồi, và có thể hơn thế nữa. Tất nhiên, nếu bạn có một phần anwsers giả định một số hạn chế nhất định đối với ngôn ngữ "regex hiện đại" này, vui lòng đăng nó.


1
Câu hỏi liên quan . Tôi dường như nhớ rằng ít nhất một số hương vị RegExp đã hoàn thành. Bài viết này có thể là một điểm khởi đầu hợp lệ cho nghiên cứu văn học.
Raphael

@Raphael cảm ơn rất nhiều, bài báo dường như trả lời một phần lớn các cuộc thẩm vấn của tôi
yago


Một lý do mạnh mẽ hơn cho lý do tại sao không phải tất cả p + nk đều có thể là số nguyên tố là khi n = p, bạn có p + nk = p (1 + k).
Nathan FD

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.