Thứ tự ưu tiên biểu thức trong toán tử (..|. .. .|..)
- từ trái sang phải, từ phải sang trái hay cái gì khác?Thứ tự của toán tử biểu thức chính quy (.. | .. ... .. | ..)
Trả lời
Từ trái sang phải và thay thế đầu tiên phù hợp "thắng", những người khác không được chọn. Đây là một hành vi regex điển hình của NFA. Mô tả tốt về hành vi đó được cung cấp tại regular-expressions.info Alternation page.
Lưu ý rằng RegexOptions.RightToLeft
chỉ làm cho công cụ regex kiểm tra chuỗi đầu vào từ phải sang trái, công cụ sửa đổi không ảnh hưởng đến cách động cơ regex xử lý mẫu đó.
Hãy để tôi minh họa: nếu bạn có một regex (aaa|bb|a)
và cố gắng tìm một trận đấu trong bbac
sử dụng Regex.Match
, giá trị bạn sẽ có được là bb
vì a
thay thế xuất hiện sau khi bbb
. Nếu bạn sử dụng Regex.Matches
, bạn sẽ nhận được tất cả các kết quả phù hợp và cả hai số bb
và a
sẽ nằm trong kết quả của bạn.
Ngoài ra, thực tế là mẫu regex được kiểm tra từ trái sang phải làm rõ rằng bên trong một nhóm thay thế không được neo, thứ tự các lựa chọn thay thế là. Nếu bạn sử dụng một regex (a|aa|aaa)
để đối sánh với abbccaa
, thay thế a
đầu tiên sẽ khớp với mỗi a
trong chuỗi (xem regex demo). Khi bạn thêm các ranh giới từ, bạn có thể đặt các lựa chọn thay thế theo bất kỳ thứ tự nào (xem one more regex demo).
- 1. Biểu thức chính quy của Python HOẶC
- 2. Hạn chế của Biểu thức chính quy?
- 3. Biểu thức chính quy Java, khớp với mọi thứ nhưng
- 4. Biểu thức chính quy Java OR operator
- 5. Biểu thức chính quy của Python
- 6. Biểu thức chính quy tiêu cực lookahead
- 7. Biểu thức chính quy JavaScript
- 8. Thứ tự đánh giá biểu thức mới?
- 9. Máy ảo từ biểu thức chính quy
- 10. Biểu thức chính quy Javascript "Ký tự không gian đơn"
- 11. Biểu thức chính quy Ký tự đại diện
- 12. Biểu thức chính quy Trừ các ký tự này
- 13. biểu thức chính quy không có ký tự
- 14. Biểu thức tính toán đệ quy
- 15. iOS biểu thức chính quy arabic
- 16. biểu thức chính quy lookbehind javascript
- 17. Biểu thức chính quy cho kho git
- 18. Biểu thức chính quy của Python không khớp với
- 19. Biểu thức chính quy của bộ chọn jQuery
- 20. Các biểu thức chính quy trong xlog của MarkLogic
- 21. Biểu thức chính quy của Python với mã số
- 22. Biểu thức chính quy kết thúc
- 23. Biểu thức chính quy - Ruby vs Perl
- 24. Quy tắc biểu thức chính quy trong Outlook 2007?
- 25. Các biểu thức chính quy thông thường
- 26. Email Xác nhận biểu thức chính quy
- 27. Perl chia và biểu thức chính quy
- 28. TCL mong đợi biểu thức chính quy
- 29. Biểu thức chính quy không tuân thủ
- 30. Clojure multiline biểu thức chính quy
Tôi nghĩ rằng có những động cơ regex luôn luôn có những trận đấu dài nhất, thay vì đầu tiên ở đây. – Joey
Động cơ regex tuân thủ POSIX yêu cầu kết quả dài nhất. Ngoài ra, Perl6 '/ pattern1 | pattern2/'cũng khớp với giải pháp thay thế dài nhất (có một toán tử' || 'hoạt động như một' | 'đơn giản trong hầu hết các hương vị khác để tạo ra giải pháp thay thế đầu tiên). –