Làm cách nào để tôi cho RegEx (phiên bản .NET) nhận được kết quả phù hợp nhỏ nhất thay vì lớn nhất?RegEx: Trận đấu nhỏ nhất hoặc trận đấu không phù hợp
Trả lời
Đối với một biểu thức chính quy như .*
hoặc .+
, thêm một dấu chấm hỏi (.*?
hoặc .+?
) để phù hợp càng ít nhân vật càng tốt. Để tùy chọn đối sánh một phần (?:blah)?
nhưng không khớp trừ khi cần thiết, hãy sử dụng một cái gì đó như (?:blah){0,1}?
. Đối với đối sánh lặp lại (hoặc sử dụng cú pháp {n,}
hoặc {n,m}
), hãy thêm dấu hỏi để cố gắng so khớp ít nhất có thể (ví dụ: {3,}?
hoặc {5,7}?
).
Tài liệu trên regular expression quantifiers cũng có thể hữu ích.
Toán tử không tham lam, ?
. Cũng giống như vậy:
.*?
Các nhà điều hành không tham lam không có nghĩa là trận đấu ngắn nhất có thể:
abcabk
a.+?k
sẽ phù hợp với toàn bộ chuỗi (trong ví dụ này) thay vì chỉ có ba dấu hiệu cuối cùng.
Tôi muốn thực sự tìm thấy kết quả phù hợp nhỏ nhất có thể thay thế.
Đó là trận đấu cuối cùng có thể có cho 'a
' để vẫn cho phép tất cả các kết quả phù hợp cho k
.
Tôi đoán cách duy nhất để làm điều đó là sử dụng một biểu thức như:
a[^a]+?k
Hoặc tìm kiếm theo thứ tự ngược lại, bắt đầu từ cuối, khi các kết quả trùng khớp được lồng nhau: "(ab (abk) bk)". – LBogaardt
@LBogaardt cách tìm kiếm theo thứ tự ngược lại? không nhận được nó – azerafati
@LBogaardt Vẫn còn câu hỏi mở: Làm thế nào một tìm kiếm theo thứ tự ngược lại? Cho phép nói rằng tôi muốn có được 'cab'. Nếu đầu vào của tôi là 'caaacab' và tôi tìm kiếm' a. *? B' nó sẽ trả về chuỗi đầy đủ thay vì kết quả khớp ngắn bên trong. Làm thế nào tôi sẽ tìm kiếm ngược từ 'b'? – C4u
- 1. số trận đấu trận đấu trận đấu
- 2. trận đấu tối đa x regex hoặc y regex
- 3. Python regex trận đấu đen dấu
- 4. Regex: từ trận đấu trong câu PHP
- 5. Android/Java regex trận đấu Thêm ký
- 6. trận đấu, chữ nhỏ bởi RegExp
- 7. Trùng khớp các trận đấu trong Regex
- 8. python trận đấu regex và thay thế
- 9. Đếm số trận đấu
- 10. Javascript RegEx một phần trận đấu
- 11. CMake regex trận đấu trong danh sách
- 12. Làm thế nào để Phù hợp với Regex "trận đấu ngắn nhất" trong .NET
- 13. trận đấu cuối dòng javascript regex
- 14. Trận đấu ngày Hamcrest
- 15. python regex đầu tiên/trận đấu ngắn nhất
- 16. Python: Nhận văn bản của một trận đấu Regex
- 17. Vim - Lệnh chọn trực quan một trận đấu regex?
- 18. trận() trả về mảng với hai trận đấu khi tôi mong đợi một trận đấu
- 19. Perl lặp qua từng trận đấu
- 20. Trả lại trận đấu đầu tiên của Ruby regex
- 21. Tất cả các trận đấu của regex trong Haskell
- 22. RegEx - Số trận đấu có độ dài thay đổi
- 23. Trận đấu mờ trong C#
- 24. ray, ruby - Cho một Regex - Xác định trận đấu Đếm
- 25. xóa dòng với trận đấu sed một regex đặc biệt
- 26. Cụm từ thông dụng - Cách tìm một trận đấu trong một trận đấu?
- 27. Đếm trận đấu chồng chéo với Regex trong C#
- 28. trận đấu nhiều dòng với một regex trong C#
- 29. Regex nhiều trận đấu trên cùng một dòng
- 30. trật tự trận đấu với một vắt
Tôi không biết, nếu tôi là người duy nhất có sự hiểu lầm này, nhưng điều quan trọng cần lưu ý: Trong khi đúng là toán tử không tham lam sẽ khớp với ít ký tự nhất có thể, nó vẫn có thể không khớp với ký tự đang tìm kiếm. "Ít ký tự nhất có thể" không bằng "trận đấu ngắn nhất có thể" về tiêu chuẩn RegEx. Xem câu trả lời bên dưới bình luận của tôi: Với 'abcabk' và' a. +? K', RegEx sẽ khớp với toàn bộ chuỗi. – Jayjayyy