¿Qué expresión regular puedo usar para encontrar todas las cadenas bar
no van precedidas de la cadena foo
? Tener espacios en blanco entre los dos también es ilegal.¿Cómo encontrar una palabra NO precedida por otra palabra específica?
así, el texto debe coincidir con las siguientes cadenas
foo is bar
hello bar
Pero no estas
foobar
foo bar
He intentado usar el siguiente
(?!<foo)bar
y se hace el trabajo realizado por eliminando foobar
, pero necesito ocuparme de los espacios en blanco, y por supuesto
(?!<foo)\s*bar
coincide con todas las cadenas.
Gracias!
"coincide con todas las cadenas". - modo pedante: (?!
¡Tienes razón, gracias por señalar eso! Terminé usando lo siguiente: preg_match ('/ (foo)? \ S * bar /', haystack, coincidencias); que encontrará la barra (ya sea precedida por foo o no), y luego una comprobación rápida de coincidencias [] identificará si un foo estuvo allí o no. – Sleepster
Lo que está buscando se llama específicamente ** aseveración de búsqueda negativa de ancho cero **. Perl, en particular, no es compatible con el ancho de mira variable (positivo o negativo), por lo que cosas como \ s * dentro de uno de ellos no funcionarán. Intente utilizar operadores de coincidencia múltiple en su lugar. – fennec