Ekspresi reguler \ p {L} dan \ p {N}


106

Saya baru mengenal ekspresi reguler dan telah diberi ekspresi reguler berikut:

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

Saya tahu apa artinya * dan | berarti "atau" dan itu \ lolos.

Tapi yang saya tidak tahu apa \p{L}dan \p{N}artinya. Saya telah mencari Google untuk itu, tanpa hasil ...

Bisakah seseorang membantu saya?


Saya juga mencarinya di Google, tetapi saya mendapatkan hasil ini .
MC Emperor

Jawaban:


160

\p{L}cocok dengan satu titik kode dalam kategori "huruf".
\p{N}cocok dengan semua jenis karakter numerik dalam skrip apa pun.

Sumber: regular-expressions.info

Jika Anda akan sering bekerja dengan ekspresi reguler, saya sarankan untuk menandai situs itu, itu sangat berguna.


terima kasih untuk jawaban cepatnya :). Tapi bukankah regex harus cocok dengan 10? Saya telah mencoba pencocok regex online: regexpal.com
Diemauerdk

@ user1093774: Saya rasa regexpal tidak mendukung \p{}, tapi ya, itu harus cocok.
Cerbrus

1
Sintaks ini khusus untuk implementasi regex Unicode modern, yang tidak dikenali oleh semua interpreter. Anda dapat mengganti \ p {L} dengan {a-zA-Z} (notasi ascii) atau {\ w} (notasi perl / vim); dan \ p {N} oleh {0-9} (ascii) atau {\ d} (perl / vim). Jika Anda ingin mencocokkan semuanya, cukup lakukan: {a-zA-Z0-9} + atau {\ w \ d} +
Rafael Beckel

16
Rafael, saya tidak setuju bahwa Anda dapat mengganti \p{L}dengan aman {a-zA-Z}. {a-zA-Z}, misalnya, tidak akan cocok dengan karakter beraksen apa pun, seperti é, yang digunakan di semua tempat dalam bahasa Prancis. Jadi ini hanya dapat diganti dengan aman jika Anda yakin bahwa Anda hanya akan memproses bahasa Inggris, dan tidak ada yang lain.
Rolf

Apakah itu cocok dengan titik kode atau unit kode? stackoverflow.com/a/27331885/4928642
Qwertiy

30

Ini adalah pintasan properti Unicode ( \p{L}untuk huruf Unicode, \p{N}untuk digit Unicode). Mereka didukung oleh .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 dan lebih tinggi) dan PHP ( sejak 5.1.0 )

Bagaimanapun, itu regex yang sangat aneh. Anda tidak boleh menggunakan pergantian ketika kelas karakter sudah cukup:

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

regex-nya dalam xml - saya sendiri belum membuat regex :)
Diemauerdk

Terlepas dari kenyataan bahwa menangkap tanda kurung digunakan, RE akan benar-benar mengkompilasi ke hal yang sama (baik, di mesin RE pengoptimalan apapun yang mendukung \p{…}gaya urutan pelolosan di tempat pertama).
Donal Fellows

yang terlihat seperti plugin unicode XRegExp. yang jika demikian, akan berupa alfa-numerik dalam bahasa apa pun
Tim

Terima kasih, membuat daftar bahasa pendukung berguna, tanpa menyadari ada batasan di sana (kebanyakan hal yang reguler menjadi "universal").
HoldOffHunger

@HoldOffHunger: Sayangnya, jauh dari itu. Itulah mengapa ada pasar untuk alat seperti RegexBuddy. Lihatlah regular-expressions.info/refbasic.html , Anda akan kagum pada perbedaan halus dan tidak terlalu halus antara rasa regex ...
Tim Pietzcker
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.