ฉันพบบทช่วยสอนที่ยอดเยี่ยมเกี่ยวกับการแสดงออกปกติและในขณะที่ฉันเข้าใจอย่างหยั่งรู้ในสิ่งที่ "โลภ", "ลังเล" และ "ความเป็นเจ้าของ" ตัวบ่งชี้ทำดูเหมือนว่าจะมีช่องโหว่ร้ายแรงในความเข้าใจของฉัน
โดยเฉพาะในตัวอย่างต่อไปนี้:
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.
คำอธิบายกล่าวถึงการกินทั้งสายป้อนข้อมูลจดหมายถูกใช้หมดการสำรองข้อมูลตัวจับคู่การเกิด "foo" ที่ถูกต้องที่สุดได้รับการสำรอกฯลฯ
แต่แม้จะมีคำอุปมาอุปมัยที่ดีที่ฉันยังไม่เข้าใจในสิ่งที่ถูกกัดกินโดยใคร ... คุณรู้ของการกวดวิชาอื่นที่อธิบาย (สังเขป) วิธีปกติการทำงานของการแสดงออกเครื่องมือ?
อีกวิธีหนึ่งถ้าใครบางคนสามารถอธิบายในประโยคที่แตกต่างกันบ้างในย่อหน้าต่อไปนี้นั่นจะเป็นการชื่นชมอย่างมาก:
ตัวอย่างแรกใช้ตัวระบุปริมาณโลภ * เพื่อค้นหา "อะไร" ศูนย์หรือมากกว่าครั้งตามด้วยตัวอักษร "f" "o" "o" เนื่องจาก quantifier เป็นโลภส่วน. * ของนิพจน์จะกินสตริงอินพุตทั้งหมดก่อน ณ จุดนี้การแสดงออกโดยรวมไม่สามารถทำได้เพราะตัวอักษรสามตัวสุดท้าย ("f" "o" "o") ได้ถูกใช้ไปแล้ว ( โดยใคร? ) ดังนั้นผู้จับคู่ช้าลง ( จากขวาไปซ้าย ) ทีละตัวอักษรหนึ่งครั้งจนกระทั่งเกิดเหตุการณ์ "foo" ที่ถูกต้องที่สุดได้รับการสำรอก ( สิ่งนี้หมายความว่าอะไร? ) ซึ่งการแข่งขันประสบความสำเร็จ
อย่างไรก็ตามตัวอย่างที่สองไม่เต็มใจดังนั้นจึงเริ่มจากการบริโภคครั้งแรก ( โดยใคร? ) "ไม่มีอะไร" เนื่องจาก "foo" ไม่ปรากฏที่จุดเริ่มต้นของสตริงจึงถูกบังคับให้กลืน ( ใครกลืน?) อักษรตัวแรก ("x") ซึ่งเรียกการจับคู่แรกที่ 0 และ 4 การทดสอบของเราดำเนินการต่อไป จนกว่าสตริงอินพุตจะหมด พบอีกนัดที่ 4 และ 13
ตัวอย่างที่สามล้มเหลวในการค้นหาคู่ที่ตรงกันเนื่องจากตัวระบุนั้นครอบครอง ในกรณีนี้สตริงการป้อนข้อมูลทั้งหมดจะถูกใช้งานโดย. * +, ( อย่างไร? ) โดยไม่เหลืออะไรเลยเพื่อตอบสนอง "foo" ที่ส่วนท้ายของนิพจน์ ใช้ quantifier ที่เป็นเจ้าของสำหรับสถานการณ์ที่คุณต้องการยึดบางสิ่งบางอย่างโดยไม่ต้องถอยกลับ (หมายถึงอะไรกลับ ) มันจะมีประสิทธิภาพสูงกว่าปริมาณโลภที่เท่ากันในกรณีที่ไม่พบการแข่งขันทันที
*
,+
และ?
มีความโลภ Minimalปริมาณชอบ*?
,+?
และ??
มีความขี้เกียจ หวงปริมาณชอบ*+
,++
และ?+
มีเหนียว