*, ?, +อักขระทั้งหมดหมายถึงตรงกับอักขระนี้ อักขระใดที่หมายความว่า 'ไม่' ตรงกับตัวนี้? ตัวอย่างจะช่วยได้
*, ?, +อักขระทั้งหมดหมายถึงตรงกับอักขระนี้ อักขระใดที่หมายความว่า 'ไม่' ตรงกับตัวนี้? ตัวอย่างจะช่วยได้
คำตอบ:
คุณสามารถใช้คลาสอักขระลบเพื่อยกเว้นอักขระบางตัวเช่น[^abcde]จะจับคู่อะไรก็ได้ยกเว้นอักขระa, b, c, d, e
แทนที่จะระบุอักขระทั้งหมดตามตัวอักษรคุณสามารถใช้shorthandsภายในคลาสอักขระ: [\w](ตัวพิมพ์เล็ก) จะจับคู่ "อักขระคำ" (ตัวอักษรตัวเลขและขีดล่าง) [\W](ตัวพิมพ์ใหญ่) จะจับคู่อะไรก็ได้ยกเว้นอักขระคำ ในทำนองเดียวกัน[\d]จะจับคู่ 0-9 หลักในขณะที่[\D]จับคู่อะไรก็ได้ยกเว้น 0-9 หลักและอื่น ๆ
หากคุณใช้ PHP คุณสามารถใช้เวลาดูที่เอกสารชั้นเรียนตัวอักษร regex
มีสองวิธีในการพูดว่า "ไม่ตรงกัน" ได้แก่ ช่วงอักขระและค่าการมองหา / lookbehind เชิงลบที่มีความกว้างเป็นศูนย์
อดีต: ไม่ตรงกันa, b, cหรือ0:[^a-c0]
ตัวหลัง: จับคู่สตริงตัวอักษรสามตัวยกเว้นfooและbar:
(?!foo|bar).{3}
หรือ
.{3}(?<!foo|bar)
นอกจากนี้การแก้ไขสำหรับคุณ: *, ?และ+ไม่จริงตรงกับอะไร พวกเขาเป็นตัวดำเนินการซ้ำและติดตามตัวดำเนินการที่ตรงกันเสมอ ดังนั้นa+วิธีการที่ตรงกับหนึ่งหรือมากกว่าของa, [a-c0]+วิธีการตรงกับหนึ่งหรือมากกว่าของa, b, cหรือ0ในขณะที่[^a-c0]+จะตรงกับหนึ่งหรือมากกว่าหนึ่งของสิ่งใดที่ไม่ได้a, b, หรือc0
^((?!foo).)+$จับคู่บรรทัดใด ๆ ที่ไม่มี foo regex101.com/r/z6a65l/4
[^] (within [] ) เป็นการปฏิเสธในนิพจน์ทั่วไปในขณะที่^"จุดเริ่มต้นของสตริง"
[^a-z] จับคู่อักขระเดี่ยวใด ๆ ที่ไม่ได้มาจาก "a" ถึง "z"
^[a-z] หมายถึงสตริงเริ่มต้นด้วย "a" ถึง "z"
^ ใช้ที่จุดเริ่มต้นของช่วงอักขระหรือการมองเชิงลบ / lookbehind การยืนยัน
>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>
?!ใน 2 ตัวอย่างสุดท้าย!ไหมคะหรือใช้เองได้? ที่?นั่นทำอะไร?
?เพื่อที่จะบอกว่ามันเป็นส่วนขยาย เอนจิ้น regex อื่น ๆ อาจมีกฎของตัวเอง