Регулярні вирази \ p {L} і \ p {N}


106

Я новачок у регулярних виразах і мені дали наступний регулярний вираз:

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

Я знаю, що * означає і | означає "або" і це \ втече.

Але що я не знаю, що \p{L}і що \p{N}означає. Я шукав це в Google, без результату ...

Може хтось мені допоможе?


Я також погукав це, але отримав такий результат .
MC імператор

Відповіді:


160

\p{L}відповідає одній кодовій точці в категорії "літера".
\p{N}відповідає будь-якому цифровому символу в будь-якому сценарії.

Джерело: regular-expressions.info

Якщо ви будете багато працювати з регулярними виразами, я пропоную зробити закладки на цьому веб-сайті, це дуже корисно.


THX для швидкої відповіді :). Але не повинен регекс відповідати 10? Я спробував онлайн- матч
Diemauerdk

@ user1093774: Я не думаю, що підтримує регулярний випадок\p{} , але так, він повинен відповідати.
Цербр

1
Цей синтаксис є специфічним для сучасної реалізації регулярних виразів Unicode, що не всі інтерпретатори визнають. Ви можете безпечно замінити \ p {L} на {a-zA-Z} (позначення ascii) або {\ w} (perl / vim notation); і \ p {N} від {0-9} (ascii) або {\ d} (perl / vim). Якщо ви хочете відповідати всім, просто зробіть: {a-zA-Z0-9} + або {\ w \ d} +
Рафаель Беккель,

16
Рафаель, я не згоден, що ти можеш сміливо замінити \p{L}його {a-zA-Z}. {a-zA-Z}, наприклад, не відповідатиме жодним наголошеним символам, наприклад é, який використовується у французькій мові. Таким чином, їх можна безпечно замінити, лише якщо ви впевнені, що будете обробляти лише англійською мовою, і більше нічого.
Рольф

Чи відповідає вона кодовій точці чи кодовій одиниці? stackoverflow.com/a/27331885/4928642
Qwertiy

30

Це ярлики властивостей Unicode ( \p{L}для літер Unicode, \p{N}для цифр Unicode). Вони підтримуються .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 і вище) та PHP ( з 5.1.0 )

У будь-якому випадку, це дуже дивний вираз. Не слід використовувати чергування, коли класу символів вистачить:

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

його регекс у xml - я сам не
зводив регекс

Окрім того, що використовувались захоплення дужок, РЕ насправді буде компілюватися до того ж самого (ну, будь-який оптимізуючий двигун RE, який \p{…}в першу чергу підтримує стиль послідовності втечі).
Дональні стипендіати

схожий на XRegExp плагін Unicode. що якщо так, то будь-яка алфавітна цифра будь-якою мовою
Тім

Дякую, перелік мов підтримки був корисним, не знаючи, що там існують обмеження (більшість регексуючих речей є "універсальними").
HoldOffHunger

@HoldOffHunger: На жаль, далеко не так. Ось чому існує ринок таких інструментів, як RegexBuddy. Подивіться на regular-expressions.info/refbasic.html , ви будете вражені тонкими і не дуже тонкими відмінностями ароматів регулярних
виразів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.