preg_match_all preg_match preg online one ejemplos all regex preg-match

preg_match - regex one



Cómo especificar "Espacio o final de cadena" y "espacio o inicio de cadena"? (4)

Imagine que está intentando emparejar el patrón "stackoverflow".

Usted quiere lo siguiente:

this is stackoverflow and it rocks [MATCH] stackoverflow is the best [MATCH] i love stackoverflow [MATCH] typostackoverflow rules [NO MATCH] i love stackoverflowtypo [NO MATCH]

Sé cómo analizar el stackoverflow si tiene espacios en ambos sitios usando:

//s(statckoverflow)/s/

Lo mismo con si está al principio o al final de una cadena:

/^(stackoverflow)/s/ //s(stackoverflow)$/

¿Pero cómo se especifica "espacio o final de cadena" y "espacio o inicio de cadena"?


Esto es lo que usaría:

(?<!/S)(?!/S)

En otras palabras, haga coincidir "" si no está precedido por un carácter que no sea de espacio en blanco y no seguido por un carácter que no sea de espacio en blanco.

Esto es más ordenado (IMO) que el enfoque de "espacio-o-ancla", y no supone que la secuencia se inicie y termine con caracteres de palabra como lo hace el enfoque /b .


Puede usar cualquiera de los siguientes:

/b #A word break and will work for both spaces and end of lines. (^|/s) #the | means or. () is a caputuring group. //b()/b/

Además, si no desea incluir el espacio en su coincidencia, puede usar lookbehind / aheads.

(?<=/s|^) #to look behind the match () #the string you want. () optional (?=/s|$) #to look ahead.


(^|/s) coincidiría con el espacio o el inicio de la cadena y ($|/s) con el espacio o el final de la cadena. Juntos es:

(^|/s)($|/s)


/b coincide con los límites de las palabras (sin combinar realmente ningún carácter), por lo que lo siguiente debe hacer lo que desee:

/b/b