\s
es la más corta y también la opción más no portátil para especificar un carácter de espacio . Aunque es raro transferir el código Java a otros lenguajes, se trata más de transferir el conocimiento de la sintaxis de un motor regex a otro. Hay muchos motores de expresiones regulares que usan la sintaxis similar a Perl, por lo que la diferencia de interpretación para la misma sintaxis como \s
confunde a los programadores.
Aparte de espacio (ASCII 32), la nueva línea (\n
, ASCII 10), pestaña horizontal (\t
, ASCII 9), retorno de carro (\r
, ASCII 13) y alimentación de forma (\f
, ASCII 12), hay no hay consenso entre los diferentes motores de lo que es un carácter de espacio.
Java, POSIX (ASCII): También incluye pestaña vertical (ASCII 11). Java parece seguir el estándar POSIX aquí.
JavaScript (Edición 5.1): De acuerdo con las especificaciones (palabra por palabra), aparte de los 5 más comunes, que incluye:
categoría Unicode Zs (Separator/Space), \u2028
(línea de separación), \u2029
(Separador de párrafos). Básicamente incluye todos los personajes de la categoría Z (Separador).
En realidad \u2028
es el único miembro de la categoría Zl (Separator/Line) y \u2029
es el único miembro de la categoría Zp (Separator/Paragraph).Por la redacción, es posible que la versión actual de las especificaciones excluya cualquier extensión adicional a esas 2 categorías.
- pestaña Vertical
\v
- Byte-marca de orden de alias CERO ANCHO NO-BREAK SPACE
\ufeff
Perl, PCRE (modo ASCII): pestaña Vertical \v
añadida por Perl 5.18 como experimento. Antes de 5.18, solo coincide con los 5 comunes.
Perl (modo Unicode): Aparte de las 5 de las más comunes
- Unicode categoría Z (separador)
- pestaña Vertical
\v
añadió de Perl 5.18 como experimento.
- siguiente línea (NEL)
\u0085
- Separador de vocal mongol
\u180e
.NET (por defecto): Aparte de 5 de las más comunes
- Unicode categoría Z (separador)
- Pestaña vertical
\v
- siguiente línea (NEL)
\u0085
Java (Unicode): A partir de Java 7, clase patrón incluye una nueva bandera UNICODE_CHARACTER_CLASS
que hace clases de personajes predefinidos y clases de caracteres POSIX se ajusten a Unicode Technical Standard #18: Unicode Regular Expression. Cuando el indicador está activo, clase de caracteres predefinidos y la correspondiente clase de caracteres POSIX serán equivalentes (coinciden con lo mismo).
La lista de caracteres es la misma que la de .NET.
¡Eso es suficiente para volver loco!
\p{Space}
es la opción más "estable", ya que sigue la POSIX standard en el modo por defecto, y Unicode Technical Standard #18: Unicode Regular Expression en UNICODE_CHARACTER_CLASS
.
Si utiliza la clase de caracteres POSIX, la aplicación compatible con POSIX tendrá el mismo comportamiento en modo ASCII, y los motores de expresiones regulares Unicode que siguen la recomendación tendrán la ( casi) el mismo comportamiento en modo Unicode.
\s
y \p{Space}
son equivalentes en Java, independientemente de la marca. Si usa \s
en Java, puede estar seguro de que está siguiendo alguna norma/recomendación. Solo que no anuncia a la mayoría de los programadores sobre este hecho.
\p{isJavaWhitespace}
para que coincida con los espacios en blanco de acuerdo con Java's definition. El nombre de la función es extremadamente engañoso.
Eso depende de lo que sea más claro para usted y para qué lo necesita. ¿Lo necesita para tratar "más tipo de espacio" como espacio o no? –
Sí, quiero usarlo para delimitar palabras en una oración. –