Necesito una expresión regular que coincida blahfooblah
pero noblahfoobarblah
Quiero que coincida solo con foo y todo lo que hay alrededor de foo, siempre que no vaya seguido de barra.
Intenté usar esto: foo.*(?<!bar)
que está bastante cerca, pero coincide blahfoobarblah
. La mirada negativa detrás debe coincidir con cualquier cosa y no solo con barra.
El lenguaje específico que estoy usando es Clojure, que usa expresiones regulares de Java bajo el capó.
EDITAR: Más específicamente, también necesito que pase, blahfooblahfoobarblah
pero no blahfoobarblahblah
.
Respuestas:
Tratar:
Pruebas:
Explicación de expresiones regulares
Otras expresiones regulares
Si solo desea excluir
bar
cuando es directamente despuésfoo
, puede usarEditar
Actualizó su pregunta para que sea más específica.
Nuevas pruebas
Nueva explicación
(?=.*foo(?!bar))
asegura quefoo
se encuentre pero no se siga directamentebar
fuente
foo
pero nofoobar
. Para igualarbot
pero nobotters
, usaría/(?=.*bot(?!ters))^(\w+)$/
.Para hacer coincidir un
foo
seguimiento con algo que no comience conbar
, intenteSu versión con lookbehind negativo es efectivamente "coincidir con un
foo
seguido de algo que no termina enbar
". Los.*
partidos de todosbarblah
, y los(?<!bar)
vuelve a mirarlah
y comprueba que no se correspondebar
, que no lo hace, así que todo el patrón de coincidencias.fuente
En su lugar, utilice una mirada negativa hacia el futuro:
Esto funcionó para mí, espero que ayude. ¡Buena suerte!
fuente
Escribiste un comentario sugiriendo que te gusta que esto funcione haciendo coincidir todas las palabras en una cadena en lugar de toda la cadena en sí.
En lugar de mezclar todo esto en un comentario, lo publico como una nueva respuesta.
Nueva expresión regular
Texto de ejemplo
Partidos
fuente
Su solicitud de coincidencia específica puede coincidir con:
Esto coincidirá
blahfooblahfoobarblah
pero noblahfoobarblahblah
.El problema con la expresión regular de
foo.*(?<!bar)
es el.*
despuésfoo
. Coincide con la mayor cantidad de caracteres, incluidos los personajes posterioresbar
.fuente