ทุกคนสามารถอธิบายความแตกต่างระหว่าง\b
และ\w
ตัวบ่งชี้การแสดงออกปกติได้หรือไม่ มันเป็นความเข้าใจของฉันว่าทั้งสอง metacharacters ใช้สำหรับขอบเขตของคำ นอกจากนี้อักขระเมตาใดที่มีประสิทธิภาพสำหรับเนื้อหาหลายภาษา
ทุกคนสามารถอธิบายความแตกต่างระหว่าง\b
และ\w
ตัวบ่งชี้การแสดงออกปกติได้หรือไม่ มันเป็นความเข้าใจของฉันว่าทั้งสอง metacharacters ใช้สำหรับขอบเขตของคำ นอกจากนี้อักขระเมตาใดที่มีประสิทธิภาพสำหรับเนื้อหาหลายภาษา
คำตอบ:
metacharacter \b
เป็นจุดยึดเช่นเครื่องหมายรูปหมวกและเครื่องหมายดอลลาร์ มันตรงกับที่ตำแหน่งที่เรียกว่าเป็น"คำว่าเขตแดน" การแข่งขันนี้มีความยาวเป็นศูนย์
มีตำแหน่งที่แตกต่างกันสามตำแหน่งที่มีคุณสมบัติเป็นขอบเขตของคำ:
ใส่เพียง: \b
ช่วยให้คุณสามารถที่จะดำเนินการ"ทั้งคำเท่านั้น"\bword\b
ค้นหาโดยใช้การแสดงออกปกติในรูปแบบของ "ตัวอักษรคำ"เป็นตัวละครที่สามารถนำมาใช้ในรูปแบบคำ ทุกตัวอักษรที่ไม่ได้เป็น"ตัวอักษรคำว่า"มี"อักขระที่ไม่ใช่คำว่า"
ในทุกรสชาติตัวละคร[a-zA-Z0-9_]
เป็นตัวอักษรคำ \w
เหล่านี้ยังมีการจับคู่โดยตัวอักษรระดับสั้นมือ รสชาติที่แสดง"ascii"สำหรับขอบเขตของคำในการเปรียบเทียบกลิ่นจะรับรู้เฉพาะสิ่งเหล่านี้เป็นอักขระคำ
\w
ย่อมาจาก"ตัวอักษรคำว่า"[A-Za-z0-9_]
มักจะ สังเกตเห็นการรวมของขีดล่างและตัวเลข
\B
\b
เป็นรุ่นเมื่อตะกี้ของ \B
ตรงกับทุกตำแหน่งที่\b
ไม่ อย่างมีประสิทธิภาพ\B
จับคู่ที่ตำแหน่งใด ๆ ระหว่างอักขระคำสองคำและตำแหน่งใด ๆ ระหว่างอักขระที่ไม่ใช่คำสองตัว
\W
สั้นสำหรับรุ่นเมื่อตะกี้ของ[^\w]
\w
\w
จับคู่อักขระคำ \b
เป็นการจับคู่แบบความกว้างศูนย์ที่จับคู่อักขระตำแหน่งที่มีอักขระคำอยู่ด้านหนึ่งและสิ่งที่ไม่ใช่อักขระคำอีกด้านหนึ่ง (ตัวอย่างของสิ่งที่ไม่ใช่ตัวอักษรรวมถึงช่องว่างจุดเริ่มต้นและจุดสิ้นสุดของสตริง ฯลฯ )
\w
การแข่งขันa
, b
, c
, d
, e
และf
ใน"abc def"
\b
การแข่งขัน (ศูนย์ความกว้าง) ตำแหน่งก่อนa
หลังจากc
ก่อนd
และหลังf
ใน"abc def"
\b
การยืนยันความกว้างเป็นศูนย์ มันไม่ได้ตรงกับตัวละครที่มันตรงกับตำแหน่ง
@Mahender คุณอาจหมายถึงความแตกต่างระหว่าง\W
(แทน\w
) และ\b
และ ถ้าไม่เช่นนั้นฉันจะเห็นด้วยกับ @BoltClock และ @jwismar ด้านบน มิฉะนั้นจะอ่านต่อ
\W
จะจับคู่อักขระที่ไม่ใช่คำใด ๆ และดังนั้นจึงเป็นเรื่องง่ายที่จะลองใช้เพื่อจับคู่ขอบเขตของคำ ปัญหาคือว่ามันจะไม่ตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัด \b
เหมาะสำหรับการจับคู่ขอบเขตของคำมากขึ้นเนื่องจากจะตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัด พูดประมาณ (ผู้ใช้มีประสบการณ์มากขึ้นสามารถแก้ไขฉันที่นี่) สามารถจะคิดว่าเป็น\b
(\W|^|$)
[แก้ไข: เนื่องจาก @ Ωล้านกล่าวถึงด้านล่าง\b
เป็นการจับคู่ที่ไม่มีความยาวดังนั้นจึง(\W|^|$)
ไม่ถูกต้อง แต่หวังว่าจะช่วยอธิบายความแตกต่าง]
ตัวอย่างรวดเร็ว: สำหรับสตริงHello World
, .+\W
จะตรงกับHello_
(พื้นที่) World
แต่จะไม่ตรงกับ .+\b
จะตรงกับทั้งสองและHello
World
\b
ความหมายเหมือนกับ(\W|^|$)
เนื่องจาก(\W|^|$)
จะรวมอักขระที่ไม่ใช่คำในผลลัพธ์การจับคู่ คุณสามารถตรวจสอบความเป็นจริงที่นี่ => regexr.com/3qf98
\b
สำหรับฉันหมายถึงเหมือนกับ(?<=\W|^|$)
เมื่อใช้ก่อนรูปแบบและ(?=\W|^|$)
เมื่อใช้หลังรูปแบบ คุณสามารถตรวจสอบสิ่งที่ผมพูดนี่ => regexr.com/3qf9h เพียงเปรียบเทียบกับผลลัพธ์ของ\b
จุดยึดที่นี่ => regexr.com/3qf9t
\b <= this is a word boundary.
จับคู่ที่ตำแหน่งที่ตามด้วยอักขระคำ แต่ไม่นำหน้าด้วยอักขระคำหรือที่นำหน้าด้วยอักขระคำ แต่ไม่ตามด้วยอักขระคำ
\w <= stands for "word character".
ตรงกับอักขระ ASCII เสมอ [A-Za-z0-9_]
มีสิ่งใดที่คุณพยายามจับคู่ไหม
บางเว็บไซต์ Regex ที่มีประโยชน์สำหรับผู้เริ่มต้นหรือเพียงแค่กระหายน้ำ
ฉันพบสิ่งนี้ว่าเป็นหนังสือที่มีประโยชน์มาก:
\w
ไม่เสมอไปกับอักขระ ASCII [A-Za-z0-9_]
- มันจะจับคู่กับรหัสรหัสตัวอักษรและตัวเลข Unicode และอาจตรงกับอักขระ ISO-Latin-1 แบบ 8 บิตหากตั้งค่าโลแคลไว้อย่างเหมาะสม .
\w
คือไม่ได้ขอบเขตของคำที่มันตรงกับตัวอักษรคำใด ๆ [a-zA-Z0-9_]
รวมทั้งขีด: \b
เป็นขอบเขตของคำซึ่งก็คือมันตรงกับตำแหน่งระหว่างคำและตัวอักษรที่ไม่ใช่ตัวอักษรและตัวเลข: \W
หรือ[^\w]
หรือ
การใช้งานเหล่านี้อาจแตกต่างกันไปในแต่ละภาษา
\w
หมายถึงตัวอักษรคำในขณะที่\b
หมายถึงขอบเขตของคำระหว่างตัวอักษรคำและตัวละครที่ไม่ใช่คำ พวกเขาไม่เหมือนกัน