Expresión regular \ p {L} y \ p {N}


106

Soy nuevo en las expresiones regulares y se me ha dado la siguiente expresión regular:

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

Sé lo que * significa y | significa "o" y eso se escapa.

Pero lo que no sé qué \p{L}y \p{N}medios. Lo he buscado en Google, sin resultado ...

¿Alguien me puede ayudar?


También lo busqué en Google, pero obtuve este resultado .
MC Emperor

Respuestas:


160

\p{L}coincide con un solo punto de código en la categoría "letra".
\p{N}coincide con cualquier tipo de carácter numérico en cualquier script.

Fuente: regular-expressions.info

Si va a trabajar mucho con expresiones regulares, le sugiero que marque ese sitio como favorito, es muy útil.


gracias por la respuesta rápida :). Pero, ¿no debería la expresión regular coincidir con 10? Probé un comparador de
Diemauerdk

@ user1093774: No creo que regexpal sea compatible \p{}, pero sí, debería coincidir.
Cerbrus

1
Esta sintaxis es específica para la implementación moderna de expresiones regulares Unicode, que no todos los intérpretes reconocen. Puede reemplazar de forma segura \ p {L} por {a-zA-Z} (notación ascii) o {\ w} (notación perl / vim); y \ p {N} por {0-9} (ascii) o {\ d} (perl / vim). Si desea combinarlos todos, simplemente haga: {a-zA-Z0-9} + o {\ w \ d} +
Rafael Beckel

16
Rafael, no estoy de acuerdo en que puedas reemplazar \p{L} por {a-zA-Z}. {a-zA-Z}, por ejemplo, no coincidirá con ningún carácter acentuado, como é, que se utiliza en todo el francés. Por lo tanto, solo se pueden reemplazar de manera segura si está seguro de que solo procesará inglés y nada más.
Rolf

¿Coincide con el punto de código o la unidad de código? stackoverflow.com/a/27331885/4928642
Qwertiy

30

Estos son atajos de propiedad Unicode ( \p{L}para letras Unicode, \p{N}para dígitos Unicode). Son compatibles con .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 y superior) y PHP ( desde 5.1.0 )

En cualquier caso, esa es una expresión regular muy extraña. No deberías usar alternancia cuando una clase de personaje sería suficiente:

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

su expresión regular en xml - no he construido la expresión regular yo mismo :)
Diemauerdk

Aparte del hecho de que se utilizaron paréntesis de captura, los RE se compilarán en lo mismo (bueno, en cualquier motor RE optimizado que admita el \p{…}estilo de secuencia de escape en primer lugar).
Donal Fellows

que se parece al complemento Unicode XRegExp. que, de ser así, sería alfanumérico en cualquier idioma
Tim

Gracias, la lista de idiomas de apoyo fue útil, sin saber que había limitaciones (la mayoría de las expresiones regulares son "universales").
HoldOffHunger

@HoldOffHunger: Lejos de eso, desafortunadamente. Es por eso que existe un mercado para herramientas como RegexBuddy. Eche un vistazo a regular-expressions.info/refbasic.html , se sorprenderá de las diferencias sutiles y no tan sutiles entre los sabores de
expresiones
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.