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.