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?

Diemauerdk
sumber
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.

Cerbrus
sumber
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}_.-]*
Tim Pietzcker
sumber
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