Buscar 'palabra' que no esté seguida de un determinado carácter
¿Cuál es la expresión regular para buscar una word
cadena que no esté seguida del @
símbolo?
Por ejemplo:
mywordLLD OK
myword.dff OK
myword@ld Exclude
La anticipación(?!@)
negativa coincidirá sólo si no aparece inmediatamente después :word
@
word
word(?!@)
Si necesita fallar una coincidencia cuando a word
va seguido de un carácter/cadena en algún lugar a la derecha , puede usar cualquiera de los tres siguientes
word(?!.*@) # Note this will require @ to be on the same line as word
(?s)word(?!.*@) # (except Ruby, where you need (?m)): This will check for @ anywhere...
word(?![\s\S]*@) # ... after word even if it is on the next line(s)
Ver demostración
Esta expresión regular coincide con word
la subcadena y (?!@)
se asegura de que no haya ningún @
derecho después de ella y, si está ahí, word
no se devuelve como una coincidencia (es decir, la coincidencia falla ).
De expresiones regulares.info :
La anticipación negativa es indispensable si desea hacer coincidir algo que no esté seguido de otra cosa. Al explicar las clases de caracteres , este tutorial explica por qué no se puede utilizar una clase de carácter negada para que coincida con un
q
no seguido de unu
. La anticipación negativa proporciona la solución:q(?!u)
. La construcción de anticipación negativa es el par de paréntesis, con el paréntesis de apertura seguido de un signo de interrogación y un signo de exclamación .
Y en la página de clases de personajes :
Es importante recordar que una clase de personaje negada aún debe coincidir con un personaje.
q[^u]
no significa: "aq
no seguida de au
". Quiere decir: "aq
seguido de un carácter que no es unu
". No coincide con elq
de la cadenaIraq
. Coincide conq
y el espacio después deq
en Irak es un país. De hecho: el espacio se convierte en parte de la coincidencia general, porque es el "carácter que no esu
" el que coincide con la clase de carácter negado en la expresión regular anterior. Si desea que la expresión regular coincida conq
, y solo conq
, en ambas cadenas, debe usar una búsqueda anticipada negativa :.q(?!u)