*, ?, +
อักขระทั้งหมดหมายถึงตรงกับอักขระนี้ อักขระใดที่หมายความว่า 'ไม่' ตรงกับตัวนี้? ตัวอย่างจะช่วยได้
*, ?, +
อักขระทั้งหมดหมายถึงตรงกับอักขระนี้ อักขระใดที่หมายความว่า 'ไม่' ตรงกับตัวนี้? ตัวอย่างจะช่วยได้
คำตอบ:
คุณสามารถใช้คลาสอักขระลบเพื่อยกเว้นอักขระบางตัวเช่น[^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
, หรือc
0
^((?!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 อื่น ๆ อาจมีกฎของตัวเอง