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