2015-07-03 16 views
9

Qual è l'espressione regolare per cercare la stringa word che non è seguita dal simbolo @?Trova 'parola' non seguito da '@'

Ad esempio:

mywordLLD   OK 
myword.dff  OK 
[email protected]   Exclude 
+1

'parola [^ @]'? Copre tutti gli esempi; non copre una linea che termina con 'word'; per questo, avresti bisogno di 'word ($ | [^ @])' invece. –

+1

@ JonathanLeffler Sei stato qui abbastanza a lungo da sapere di pubblicare le risposte come risposte, non come commenti. :) Ad ogni modo, ciò include anche il prossimo personaggio nella partita, quindi per esempio 's/word [^ @]/otherword/g' non avrà lo stesso effetto della risposta di stribizhev sull'uso di un lookahead. – hvd

+1

@hvd quindi 'word @ (* SKIP) (* F) | word' –

risposta

23

Il ([email protected]) negativo look-ahead è necessario qui:

word([email protected]) 

Vedi demo

Questa regex word sottostringa e ([email protected]) si assicura che non v'è alcun @ subito dopo e, se è lì, lo word non viene restituito come corrispondenza (ad es. la partita fallisce).

Da Regular-expressions.info:

lookahead negativo è indispensabile se si vuole abbinare qualcosa non seguito da qualcos'altro. Durante la spiegazione di , , questo tutorial ha spiegato perché non è possibile utilizzare una classe di caratteri negata per corrispondere a q non seguita da u. Il lookahead negativo fornisce la soluzione: q(?!u). Il costrutto lookahead negativo è la coppia di parentesi, con la parentesi di apertura seguita da un punto interrogativo e un punto esclamativo.

E su Character classes pagina:

E 'importante ricordare che una classe di caratteri negata ancora deve corrispondere a un carattere. q[^u] non significa: "a q non seguito da un u". Significa: "a q seguito da un carattere che non è un u". Non corrisponde allo q nella stringa Iraq. Corrisponde allo q e lo spazio dopo lo q in Iraq è un paese. Infatti: lo spazio diventa parte della corrispondenza generale, perché è il "personaggio che non è un u" che è abbinato dalla classe di caratteri negata nella espressione regexp precedente. Se si desidera che la regex corrisponda allo q e solo allo q, in entrambe le stringhe, è necessario utilizzare lookahead negativo: q(?!u).

Problemi correlati