Expressão regular \ p {L} e \ p {N}


106

Eu sou novo em expressões regulares e recebi a seguinte expressão regular:

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

Eu sei o que * significa e | significa "ou" e esse \ escapa.

Mas o que eu não sei o que \p{L}e \p{N}meios. Procurei no Google por isso, sem resultado ...

Alguém pode me ajudar?


Eu pesquisei no Google também, mas consegui esse resultado .
MC Imperador

Respostas:


160

\p{L}corresponde a um único ponto de código na categoria "letra".
\p{N}corresponde a qualquer tipo de caractere numérico em qualquer script.

Fonte: regular-expressions.info

Se você vai trabalhar muito com expressões regulares, sugiro marcar esse site, é muito útil.


obrigado pela resposta rápida :). Mas a regex não deveria corresponder a 10? Eu tentei um matcher regex online: regexpal.com
Diemauerdk

@ user1093774: Não acho que o regexpal suporte \p{}, mas sim, deve corresponder.
Cerbrus de

1
Essa sintaxe é específica para a implementação de regex Unicode moderna, que nem todos os interpretadores reconhecem. Você pode substituir \ p {L} com segurança por {a-zA-Z} (notação ascii) ou {\ w} (notação perl / vim); e \ p {N} por {0-9} (ascii) ou {\ d} (perl / vim). Se você quiser combinar todos eles, basta fazer: {a-zA-Z0-9} + ou {\ w \ d} +
Rafael Beckel

16
Rafael, não concordo que você possa substituir com segurança \p{L}por {a-zA-Z}. {a-zA-Z}, por exemplo, não corresponderá a nenhum caractere acentuado, como é, que é usado em francês. Portanto, eles só podem ser substituídos com segurança se você tiver certeza de que processará apenas inglês e nada mais.
Rolf

Corresponde ao ponto de código ou unidade de código? stackoverflow.com/a/27331885/4928642
Qwertiy

30

Esses são atalhos de propriedade Unicode ( \p{L}para letras Unicode, \p{N}para dígitos Unicode). Eles são suportados por .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 e superior) e PHP ( desde 5.1.0 )

De qualquer forma, é um regex muito estranho. Você não deve usar alternância quando uma classe de personagem seria suficiente:

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

seu regex em xml - eu não construí o regex sozinho :)
Diemauerdk

Além do fato de que foram usados ​​parênteses de captura, os REs irão, na verdade, compilar para a mesma coisa (bem, em qualquer mecanismo RE otimizado que suporta o \p{…}estilo de sequência de escape em primeiro lugar).
Donal Fellows de

que se parece com o plugin Unicode XRegExp. que se sim, seria qualquer alfanumérico em qualquer idioma
Tim

Obrigado, listar os idiomas de suporte foi útil, sem saber que havia limitações lá (a maioria das coisas do regex sendo "universal").
HoldOffHunger

@HoldOffHunger: Longe disso, infelizmente. É por isso que existe um mercado para ferramentas como o RegexBuddy. Dê uma olhada em regular-expressions.info/refbasic.html , você ficará surpreso com as diferenças sutis e não tão sutis entre os sabores de regex ...
Tim Pietzcker
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.