¿Alguien puede explicar la diferencia entre metacaracteres \b
y \w
expresiones regulares? Tengo entendido que estos dos metacaracteres se usan para límites de palabras. Además de esto, ¿qué meta carácter es eficiente para el contenido multilingüe?
142
\w
representa un carácter de palabra , mientras que\b
representa un límite de palabra entre un carácter de palabra y un carácter que no es de palabra. No son lo mismo.Respuestas:
El metacarácter
\b
es un ancla como el símbolo de intercalación y el signo de dólar. Coincide en una posición que se llama "límite de palabra" . Este partido es de longitud cero.Hay tres posiciones diferentes que califican como límites de palabras:
En pocas palabras: le
\b
permite realizar una búsqueda de "solo palabras completas" utilizando una expresión regular en forma de\bword\b
. Un "carácter de palabra" es un carácter que puede usarse para formar palabras. Todos los caracteres que no son "caracteres de palabras" son " caracteres que no son palabras" .En todos los sabores, los caracteres
[a-zA-Z0-9_]
son caracteres de palabras. Estos también se corresponden con la clase de personaje de mano corta\w
. Los sabores que muestran "ascii" para los límites de palabras en la comparación de sabores solo los reconocen como caracteres de palabras.\w
significa "carácter de palabra" , por lo general[A-Za-z0-9_]
. Observe la inclusión del guión bajo y los dígitos.\B
es la versión negada de\b
.\B
coincide en todas las posiciones donde\b
no. Efectivamente,\B
coincide en cualquier posición entre caracteres de dos palabras, así como en cualquier posición entre dos caracteres que no son palabras.\W
es la abreviatura de[^\w]
la versión negada de\w
.fuente
\w
coincide con un caracter de palabra.\b
es una coincidencia de ancho cero que coincide con un carácter de posición que tiene un carácter de palabra en un lado, y algo que no es un carácter de palabra en el otro. (Los ejemplos de cosas que no son caracteres de palabras incluyen espacios en blanco, principio y final de la cadena, etc.)\w
partidosa
,b
,c
,d
,e
, yf
en"abc def"
\b
coincide con la posición (cero-anchura) antes dea
, después dec
, antes ded
, y después def
en"abc def"
Ver: http://www.regular-expressions.info/reference.html/
fuente
\b
una afirmación de ancho cero; no coincide con un personaje , coincide con una posición .@Mahender, probablemente quisiste decir la diferencia entre
\W
(en lugar de\w
) y\b
. Si no, estaría de acuerdo con @BoltClock y @jwismar arriba. De lo contrario, sigue leyendo.\W
coincidiría con cualquier carácter que no sea de palabra, por lo que es fácil tratar de usarlo para unir los límites de las palabras. El problema es que no coincidirá con el inicio o el final de una línea.\b
es más adecuado para hacer coincidir los límites de las palabras, ya que también coincidirá con el inicio o el final de una línea. En términos generales (los usuarios más experimentados pueden corregirme aquí)\b
pueden considerarse como(\W|^|$)
. [Editar: como @ Ωmega menciona a continuación,\b
es una coincidencia de longitud cero, por(\W|^|$)
lo que no es estrictamente correcta, pero con suerte ayuda a explicar la diferencia]Ejemplo rápido: para la cadena
Hello World
,.+\W
coincidiríaHello_
(con el espacio) pero no coincidiráWorld
..+\b
coincidiría con ambosHello
yWorld
.fuente
\b
significado de lo mismo(\W|^|$)
, ya(\W|^|$)
que incluirá el carácter que no sea de palabra dentro del resultado coincidente. Puede verificar este hecho aquí => regexr.com/3qf98 .\b
para mí, significa lo mismo que(?<=\W|^|$)
cuando se usa antes de un patrón y(?=\W|^|$)
cuando se usa después de un patrón. Puedes consultar lo que estoy hablando aquí => regexr.com/3qf9h . Simplemente compare con el resultado de las\b
anclas aquí => regexr.com/3qf9tCoincide en una posición seguida de un carácter de palabra pero no precedida por un carácter de palabra, o que está precedida por un carácter de palabra pero no seguido por un carácter de palabra.
Siempre coincide con los caracteres ASCII [A-Za-z0-9_]
¿Hay algo específico que intentas hacer coincidir?
Algunos sitios web de expresiones regulares útiles para principiantes o simplemente para calmar el apetito.
Encontré que este es un libro muy útil:
fuente
\w
no siempre es equivalente a los caracteres ASCII[A-Za-z0-9_]
: también coincidirá con puntos de código alfanuméricos Unicode y puede coincidir con caracteres ISO-Latin-1 de 8 bits si la configuración regional está configurada adecuadamente .\w
es no un límite de palabra, que coincide con cualquier carácter de palabra, incluyendo guiones:[a-zA-Z0-9_]
.\b
es un límite de palabra, es decir, coincide con la posición entre una palabra y un carácter no alfanumérico:\W
o[^\w]
.Sin embargo, estas implementaciones pueden variar de un idioma a otro.
fuente