Diferencia entre \ b y \ s en expresión regular

Estaba aprendiendo expresiones regulares en iOS, vi este tutorial: http://www.raywenderlich.com/30288/nsregularexpression-tutorial-and-cheat-sheet

Se lee así para \ b:

\ b coincide con los caracteres del límite de la palabra, como los espacios y la puntuación. a \ b coincidirá con "a" en "a la luna" y "a", pero no coincidirá con "mañana". \ b es útil para la coincidencia de tipo "palabra completa".

y \ s:

\ s coincide con los caracteres de espacios en blanco, como espacios, tabs y líneas nuevas. hello \ s coincidirá con "hola" en "¡Bien, hola!".

Tengo dos preguntas al respecto:

1) what is the difference between \s and \b? when to use which? what is the difference between \s and \b? when to use which?

2) \b is handy for "whole word" type matching -> Don't understand the meaning..

Necesita orientación sobre estos dos.

\b Caracteres de límite

\b coincide con el límite en sí, pero no con el límite (como una coma o punto). No tiene longitud en sí misma, pero se puede usar para encontrar, por ejemplo, e al final de una palabra .

Por ejemplo, en la oración: "Hola, esta es una testing. Prueba"

La expresión regular e\b coincidirá con una e si está al final de la palabra (seguida de un límite de palabra). Observe en la image a continuación que el e en "testing" y "Prueba" no coincidió, ya que la "e" no está seguida por un límite.

introduzca la descripción de la imagen aquí

\s espacio en blanco

\s por otro lado coincide con los caracteres reales del espacio en blanco (como espacios y tabs). En la misma oración coincidirá con todos los espacios entre las palabras.

introduzca la descripción de la imagen aquí


Editar

Como \b no tiene mucho sentido solo, mostré cómo hacerlo como e\b (arriba). El OP preguntó (en un comentario) sobre lo que sería equivalente a e\b para explicar mejor la diferencia entre \b y \s .

En la misma cadena solo hay una coincidencia para e\s mientras que había dos coincidencias para e\b ya que la coma no es un espacio en blanco. Tenga en count que la coincidencia e\s (image 3) incluye el espacio en blanco donde no coincide la coincidencia e\b (image 1).

introduzca la descripción de la imagen aquí

\b es de ancho cero. Es decir, en realidad no coincide con ningún personaje. Mientras tanto, \s hace coincidir un personaje. Esta es una distinción importante para capturar y expresiones regulares más complicadas.

Por ejemplo, digamos que está tratando de hacer coincidir los numbers que comienzan con varios ceros, como 007 o 000101101 . Puede probar:

 0+\d* 

¡Pero mira, eso también coincidiría con 1007 y 101000101101 ! Entonces, puedes probar:

 \s0+\d* 

Pero mira cómo eso no coincidiría con un 007 al comienzo de la cadena (porque no hay ningún carácter de espacio)? Usando \b te permite get la "palabra completa (o número)":

 \b0+\d* 
  • \b coincide con un límite de palabras . Es una aserción de ancho cero, lo que significa que no coincide con un carácter, que coincide con una position, donde cierta condición es verdadera.

    \b está relacionado con \w . \w define "caracteres de palabra", letras, dígitos y guiones bajos. Entonces \b ahora está haciendo coincidir en un cambio de un carácter de palabra a un carácter que no es de palabra, o al revés. Significa que coincide con el comienzo y el final de una palabra, pero no con el carácter anterior o posterior a la palabra .

  • \s es una class de carácter pnetworkingefinida que coincide con cualquier carácter de espacio en blanco.

Mira y testing qué \bFoo\b aquí en Regexr

Vea y pruebe qué \sFoo\s aquí en Regexr

\b coincide con cualquier personaje que no sea una letra o número sin includese en el mismo.

\s coincide solo con el espacio en blanco.

Por ejemplo: \ b coincidiría con cualquiera de estos: "!?,. @ # $% ^ & * () _ +".

 $text = "Hello, Yo! moo ."; $regex = "~o\b~"; 

^ — Igualará las tres o's.

 $text = "Hello, Yo! moo ."; $regex = "~o\s~"; 

^ — Solo coincidirá con la 'o' en 'moo'.