นิพจน์ทั่วไป \ p {L} และ \ p {N}


109

ฉันยังใหม่กับนิพจน์ทั่วไปและได้รับนิพจน์ทั่วไปดังต่อไปนี้:

(\p{L}|\p{N}|_|-|\.)*

ฉันรู้ว่า * หมายถึงอะไรและ | หมายถึง "หรือ" และนั่นคือ \ Escape

แต่สิ่งที่ฉันไม่รู้ว่าอะไร\p{L}และ\p{N}หมายความว่าอย่างไร ฉันค้นหาใน Google แล้วไม่มีผลลัพธ์ ...

ใครสามารถช่วยฉัน?


ฉัน Googled มันด้วย แต่ฉันก็ได้ผลลัพธ์นี้
MC Emperor

คำตอบ:


164

\p{L}ตรงกับจุดรหัสเดียวในหมวดหมู่ "letter"
\p{N}จับคู่อักขระตัวเลขในสคริปต์ใด ๆ

ที่มา: regular-expressions.info

หากคุณจะทำงานกับนิพจน์ทั่วไปเป็นจำนวนมากฉันขอแนะนำให้บุ๊กมาร์กไซต์นั้นจะมีประโยชน์มาก


ขอบคุณสำหรับคำตอบที่รวดเร็ว :) แต่ regex ไม่ควรตรงกับ 10? ฉันได้ลองจับคู่ regex ออนไลน์แล้ว: regexpal.com
Diemauerdk

@ user1093774: ฉันไม่คิดว่าregexpalรองรับ\p{}แต่ใช่มันควรจะตรงกัน
Cerbrus

1
ไวยากรณ์นี้เฉพาะสำหรับการใช้งาน Unicode regex สมัยใหม่ซึ่งล่ามบางคนไม่รู้จัก คุณสามารถแทนที่ \ p {L} ด้วย {a-zA-Z} (สัญกรณ์ ascii) หรือ {\ w} (สัญกรณ์ perl / vim) ได้อย่างปลอดภัย และ \ p {N} โดย {0-9} (ascii) หรือ {\ d} (perl / vim) หากคุณต้องการจับคู่ทั้งหมดให้ทำ: {a-zA-Z0-9} + หรือ {\ w \ d} +
Rafael Beckel

16
ราฟาเอล, I dont' ยอมรับว่าคุณได้อย่างปลอดภัยสามารถแทนที่โดย\p{L} ตัวอย่างเช่นจะไม่ตรงกับอักขระที่เน้นเสียงใด ๆ เช่นซึ่งใช้ทั้งหมดในภาษาฝรั่งเศส ดังนั้นสิ่งเหล่านี้สามารถเปลี่ยนได้อย่างปลอดภัยก็ต่อเมื่อคุณแน่ใจว่าคุณจะประมวลผลภาษาอังกฤษเท่านั้นและไม่มีอะไรอื่น {a-zA-Z}{a-zA-Z}é
Rolf

ตรงกับจุดรหัสหรือหน่วยรหัสหรือไม่ stackoverflow.com/a/27331885/4928642
Qwertiy

30

นี่คือทางลัดคุณสมบัติ Unicode ( \p{L}สำหรับตัวอักษร\p{N}Unicode สำหรับตัวเลข Unicode) รองรับโดย. NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 ขึ้นไป) และ PHP ( ตั้งแต่ 5.1.0 )

ไม่ว่าอย่างไรก็ตามนั่นเป็นนิพจน์ทั่วไปที่แปลกมาก คุณไม่ควรใช้การสลับเมื่อคลาสอักขระเพียงพอ:

[\p{L}\p{N}_.-]*

regex ใน xml - ฉันยังไม่ได้สร้าง regex ด้วยตัวเอง :)
Diemauerdk

นอกเหนือจากข้อเท็จจริงที่ว่ามีการใช้วงเล็บจับภาพแล้ว REs จะคอมไพล์เป็นสิ่งเดียวกัน (เช่นกันในเอ็นจิ้น RE ที่ปรับให้เหมาะสมใด ๆ ที่สนับสนุน\p{…}รูปแบบลำดับการหลบหนีตั้งแต่แรก)
Donal Fellows

ที่ดูเหมือนปลั๊กอิน Unicode ของ XRegExp ซึ่งถ้าเป็นเช่นนั้นจะเป็นตัวอักษรและตัวเลขในภาษาใดก็ได้
ทิม

ขอขอบคุณรายชื่อภาษาที่สนับสนุนมีประโยชน์โดยไม่ทราบว่ามีข้อ จำกัด อยู่ที่นั่น (สิ่งที่ regex'y ส่วนใหญ่เป็น "สากล")
HoldOffHunger

@HoldOffHunger: ไกลจากมันน่าเสียดาย นั่นเป็นเหตุผลว่าทำไมจึงมีตลาดสำหรับเครื่องมือเช่น RegexBuddy ลองดูที่regular-expressions.info/refbasic.htmlคุณจะประหลาดใจกับความแตกต่างที่ละเอียดอ่อนและไม่ละเอียดอ่อนระหว่างรสชาติ regex ...
Tim Pietzcker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.