Expression régulière \ p {L} et \ p {N}


106

Je suis nouveau dans les expressions régulières et j'ai reçu l'expression régulière suivante:

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

Je sais ce que signifie * et | signifie "ou" et que \ s'échappe.

Mais ce que je ne sais pas quoi \p{L}et \p{N}signifie. Je l'ai cherché sur Google, sans résultat ...

Est-ce que quelqu'un peut m'aider?


Je l'ai googlé aussi, mais j'ai obtenu ce résultat .
— MC Emperor

Réponses:


160

\p{L}correspond à un seul point de code dans la catégorie «lettre».
\p{N}correspond à tout type de caractère numérique dans n'importe quel script.

Source: regular-expressions.info

Si vous allez beaucoup travailler avec des expressions régulières, je vous suggère de mettre ce site en favori, c'est très utile.


merci pour la réponse rapide :). Mais le regex ne devrait-il pas alors correspondre à 10? J'ai essayé un matcher regex en ligne: regexpal.com
— Diemauerdk

@ user1093774: Je ne pense pas que regexpal supporte \p{}, mais oui, cela devrait correspondre.
— Cerbrus

1
Cette syntaxe est spécifique à l'implémentation moderne de regex Unicode, que tous les interprètes ne reconnaissent pas. Vous pouvez remplacer en toute sécurité \ p {L} par {a-zA-Z} (notation ascii) ou {\ w} (notation perl / vim); et \ p {N} par {0-9} (ascii) ou {\ d} (perl / vim). Si vous voulez tous les faire correspondre, faites simplement: {a-zA-Z0-9} + ou {\ w \ d} +
— Rafael Beckel

16
Rafael, je ne suis pas d'accord pour dire que vous pouvez remplacer en toute sécurité \p{L}par {a-zA-Z}. {a-zA-Z}, par exemple, ne correspondra à aucun caractère accentué, tel que é, qui est utilisé partout en français. Donc, ceux-ci ne sont remplaçables en toute sécurité que si vous êtes sûr que vous ne traiterez que l'anglais, et rien d'autre.
— Rolf

Correspond-il au point de code ou à l'unité de code? stackoverflow.com/a/27331885/4928642
— Qwertiy

30

Ce sont des raccourcis de propriété Unicode ( \p{L}pour les lettres Unicode, \p{N}pour les chiffres Unicode). Ils sont pris en charge par .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 et supérieur) et PHP ( depuis 5.1.0 )

En tout cas, c'est une regex très étrange. Vous ne devriez pas utiliser l'alternance lorsqu'une classe de caractères suffirait:

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

son regex en xml - je n'ai pas construit le regex moi-même :)
— Diemauerdk

Outre le fait que des parenthèses de capture ont été utilisées, les REs compileront en fait à la même chose (enfin, dans tout moteur d'optimisation RE prenant en charge le \p{…}style de séquence d'échappement en premier lieu).
— Donal Fellows

qui ressemble au plugin unicode XRegExp. qui, si tel est le cas, serait n'importe quel alphanumérique dans n'importe quelle langue
— Tim

Merci, la liste des langues de support était utile, sans savoir qu'il y avait des limitations là-bas (la plupart des choses regex'y étant "universelles").
— HoldOffHunger

@HoldOffHunger: Loin de là, malheureusement. C'est pourquoi il existe un marché pour des outils comme RegexBuddy. Jetez un œil à regular-expressions.info/refbasic.html , vous serez étonné des différences subtiles et pas si subtiles entre les saveurs de regex ...
— Tim Pietzcker
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.