Tôi tìm thấy hướng dẫn tuyệt vời này về các biểu thức chính quy và trong khi tôi trực giác hiểu được các số lượng "tham lam", "miễn cưỡng" và "sở hữu" làm gì, dường như có một lỗ hổng nghiêm trọng trong sự hiểu biết của tôi.
Cụ thể, trong ví dụ sau:
Enter your regex: .*foo // greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.
Enter your regex: .*?foo // reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.
Enter your regex: .*+foo // possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.
Lời giải thích đề cập đến việc ăn toàn bộ chuỗi đầu vào, các chữ cái đã được sử dụng , sao lưu trùng khớp , sự xuất hiện ngoài cùng bên phải của "foo" đã được lấy lại , v.v.
Thật không may, mặc dù những ẩn dụ tốt đẹp, tôi vẫn không hiểu những gì được ăn bởi ai ... Bạn có biết một hướng dẫn khác giải thích (chính xác) cách các công cụ biểu thức chính quy hoạt động không?
Ngoài ra, nếu ai đó có thể giải thích theo một số cụm từ khác nhau, đoạn đó sẽ được đánh giá cao:
Ví dụ đầu tiên sử dụng bộ định lượng tham lam. * Để tìm "bất cứ thứ gì", không hoặc nhiều lần, theo sau là các chữ cái "f" "o" "o". Bởi vì bộ định lượng là tham lam, phần. * Của biểu thức trước tiên ăn toàn bộ chuỗi đầu vào. Tại thời điểm này, biểu thức tổng thể không thể thành công, vì ba chữ cái cuối cùng ("f" "o" "o") đã được sử dụng ( bởi ai? ). Vì vậy, trình so khớp từ từ lùi lại ( từ phải sang trái? ) Một chữ cái tại một thời điểm cho đến khi sự xuất hiện ngoài cùng bên phải của "foo" đã được lấy lại ( điều này có nghĩa là gì? ), Tại thời điểm đó, trận đấu kết thúc và quá trình tìm kiếm kết thúc.
Tuy nhiên, ví dụ thứ hai là miễn cưỡng, vì vậy nó bắt đầu bằng cách tiêu thụ đầu tiên ( bởi ai? ) "Không có gì". Vì "foo" không xuất hiện ở đầu chuỗi, nên nó buộc phải nuốt ( ai nuốt?) Chữ cái đầu tiên ("x"), kích hoạt trận đấu đầu tiên ở 0 và 4. Khai thác thử nghiệm của chúng tôi tiếp tục quá trình cho đến khi chuỗi đầu vào cạn kiệt. Nó tìm thấy một trận đấu khác tại 4 và 13.
Ví dụ thứ ba không tìm thấy kết quả khớp vì bộ định lượng là sở hữu. Trong trường hợp này, toàn bộ chuỗi đầu vào được sử dụng bởi. * +, ( Làm thế nào? ) Không để lại gì để đáp ứng "foo" ở cuối biểu thức. Sử dụng một bộ định lượng sở hữu cho các tình huống mà bạn muốn nắm bắt tất cả mọi thứ mà không bao giờ lùi lại ( điều đó có nghĩa là gì? ); nó sẽ vượt trội hơn bộ định lượng tham lam tương đương trong trường hợp không tìm thấy kết quả khớp ngay lập tức.
*
,+
và?
là tham lam. Tối thiểu quantifiers thích*?
,+?
và??
là lười biếng. Sở hữu quantifiers thích*+
,++
và?+
là dính.