Hãy xem xét một ngôn ngữ regex với bộ định lượng tham lam , bộ định lượng không tham lam, ra lệnh xen kẽ, và các lớp nhân vật. (Đây thực chất là một ngôn ngữ con của PCRE mà không có phản hồi, xác nhận xung quanh hoặc một số bit fancier khác.)∗ ?
Một trận đấu cho một regex trên một chuỗi là một khoảng thời gian nửa mở trên mà được chấp nhận bởi .R s = s 0 ... s n N s một 0 ... là một 1 - 1 R
Chúng tôi đưa ra một định nghĩa đệ quy về những gì làm cho một kết hợp tốt hơn so với khác. Trận đấu cho regex trên chuỗi tốt hơn so với trận đấu khác nếu hoặc, nếu và:Ra 0 < b 0 a 0 = b 0
Nếu là một lớp nhân vật: Các lớp nhân vật có các trận đấu duy nhất, vì vậy tất cả các trận đấu ở cùng một vị trí cho đều bằng nhau. Do đó trường hợp này là không thể.R
Nếu :
- Phần đầu của là phần khớp với tốt hơn phần đầu của , hoặcS b
- Các phần đầu của và là các kết quả khớp tốt cho và phần cuối của là phần khớp với tốt hơn phần đuôi của .b S a T b
Nếu :
- là khớp với và thì không, hoặcb
- và tương xứng với và là kết hợp tốt hơn cho so với , hoặcS a S b
- và không khớp với nhưng là khớp với và phù hợp hơn với T so với b .S T a T b
Tất cả các hình thức cú pháp khác giảm xuống ba mục đích trên cho mục đích ưu tiên khớp:
- :
- :
Các mẫu vô hạn này chỉ được sử dụng cho mục đích ưu tiên đối sánh --- chúng không phải là một phần của ngôn ngữ đối sánh đang được xem xét.
Mối quan hệ "tốt hơn" là một trật tự tuyến tính yếu trên tất cả các kết quả khớp có thể có cho một mẫu nhất định.
Gọi hai regexes trận đấu tương đương nếu, mỗi chuỗi đầu vào hữu hạn, tập các cặp rời nhau phù hợp nhất cho bằng tập các cặp rời nhau phù hợp nhất cho .S T
Q: Có phải là trường hợp cho mọi regex có chứa bộ định lượng không tham giaCó một biểu thức chính quy tương đương không chứa định lượng không tham gia?∗ ? T
Chỉnh sửa: Đây là một bản viết lại hoàn chỉnh của câu hỏi để làm rõ những gì đang được hỏi.
a+?
) vẫn là {a ^ n: n≥1}. Nếu bạn thực hiện một unanchored trận đấu regex (như 'aaaa' =~ /a+?/
trong Perl), bạn sẽ không nhận được aaaa
kết quả là, nhưng đó chỉ là vì các chi nhánh đang cố gắng theo một thứ tự khác nhau từ a+
. Nếu bạn làm điều đó một cách thích hợp với các neo (chẳng hạn như 'aaaa' =~ /^a+?\z/
trong Perl), bạn sẽ nhận được aaaa
kết quả.
//g
trong Perl) sẽ trở lại?
\tt
không ngăn LaTeX diễn giải các ký tự đặc biệt và các chuỗi điều khiển!)