Diferencia entre los metacaracteres de expresión regular \ w y \ b

¿Alguien puede explicar la diferencia entre los \w expresiones regulares \w y \b ?

Tengo entendido que ambos metacaracteres se usan para límites de palabras. Aparte de esto, ¿qué personaje meta es eficiente para contenido multilingüe?

El metacarácter \b es un anclaje como el signo de intercalación y el signo de dólar. Coincide en una posición que se llama un “límite de palabras” . Este partido es de longitud cero.

Hay tres posiciones diferentes que califican como límites de palabras:

  • Antes del primer caracter en la cadena, si el primer caracter es un personaje de palabra.
  • Después del último carácter en la cadena, si el último carácter es un carácter de palabra.
  • Entre dos caracteres en la cadena, donde uno es un carácter de palabra y el otro no es un carácter de palabra.

En pocas palabras: \b permite realizar una búsqueda de “palabras completas solamente” utilizando una expresión regular en forma de \bword\b . Un “personaje de palabra” es un personaje que se puede usar para formar palabras. Todos los personajes que no son “personajes de palabras” son “caracteres sin palabras” .

En todos los sabores, los caracteres [a-zA-Z0-9_] son caracteres de palabra. Estos también se corresponden con la clase de caracteres de mano corta \w . Los sabores que muestran “ascii” para los límites de las palabras en la comparación del sabor reconocen solo estos como caracteres de las palabras.

\w significa “carácter de palabra” , generalmente [A-Za-z0-9_] . Observe la inclusión del subrayado 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 dos caracteres de palabra, así como en cualquier posición entre dos caracteres que no sean de palabra.

\W es la abreviatura de [^\w] , la versión negada de \w .

\w coincide con un carácter 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. (Ejemplos de cosas que no son caracteres de palabras incluyen espacios en blanco, comienzo y final de la cadena, etc.)

\w coincide con a , b , c , d , e y f en "abc def"
\b coincide con la posición (ancho cero) antes de a , después de c , antes de d , y después de f en "abc def"

Ver: http://www.regular-expressions.info/reference.html/

@ Mahender, probablemente quiso decir la diferencia entre \W (en lugar de \w ) y \b . Si no, entonces estaría de acuerdo con @BoltClock y @jwismar arriba. De lo contrario, continúe leyendo.

\W coincidiría con cualquier carácter que no sea de palabra, por lo que es fácil de usar para que coincida con 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 límites de palabras, ya que también coincidirá con el inicio o el final de una línea. A grandes rasgos (usuarios más experimentados pueden corregirme aquí) \b se puede considerar como (\W|^|$) . [Editar: como @ Ωmega menciona a continuación, \b es una coincidencia de longitud cero por lo que (\W|^|$) no es estrictamente correcto, pero con suerte ayuda a explicar la diferencia]

Ejemplo rápido: para la cadena Hello World Hello_ .+\W coincidiría con Hello_ (con el espacio) pero no coincidiría con World . .+\b coincidiría tanto con Hello como con World .

 \b <= this is a word boundary. 

Coincide con una posición que es seguida por 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.

 \w <= stands for "word character". 

Siempre coincide con los caracteres ASCII [A-Za-z0-9_]

¿Hay algo específico que intentas emparejar?

Algunos sitios web regex útiles para principiantes o simplemente para calmar el apetito.

Encontré que este es un libro muy útil:

  • Dominio de expresiones regulares por Jeffrey EF Friedl

\w no es un límite de palabra, coincide con cualquier carácter de palabra, incluidos los guiones bajos: [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 lenguaje a otro.