¿Alguien puede explicar la diferencia entre metacaracteres \by \wexpresiones 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

\wrepresenta un carácter de palabra , mientras que\brepresenta 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
\bes 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
\bpermite 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.\wsignifica "carácter de palabra" , por lo general[A-Za-z0-9_]. Observe la inclusión del guión bajo y los dígitos.\Bes la versión negada de\b.\Bcoincide en todas las posiciones donde\bno. Efectivamente,\Bcoincide en cualquier posición entre caracteres de dos palabras, así como en cualquier posición entre dos caracteres que no son palabras.\Wes la abreviatura de[^\w]la versión negada de\w.fuente
\wcoincide con un caracter de palabra.\bes 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.)\wpartidosa,b,c,d,e, yfen"abc def"\bcoincide con la posición (cero-anchura) antes dea, después dec, antes ded, y después defen"abc def"Ver: http://www.regular-expressions.info/reference.html/
fuente
\buna 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.\Wcoincidirí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.\bes 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í)\bpueden considerarse como(\W|^|$). [Editar: como @ Ωmega menciona a continuación,\bes 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,.+\WcoincidiríaHello_(con el espacio) pero no coincidiráWorld..+\bcoincidiría con ambosHelloyWorld.fuente
\bsignificado 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 .\bpara 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\banclas 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
\wno 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 .\wes no un límite de palabra, que coincide con cualquier carácter de palabra, incluyendo guiones:[a-zA-Z0-9_].\bes un límite de palabra, es decir, coincide con la posición entre una palabra y un carácter no alfanumérico:\Wo[^\w].Sin embargo, estas implementaciones pueden variar de un idioma a otro.
fuente