Regex per stringa contiene?


114

Qual è l'espressione regolare per controllare semplicemente se una stringa contiene una certa parola (ad esempio "Test")? Ho cercato su Google ma non riesco a ottenere un esempio diretto di una tale regex. Questo è per uno script di compilazione ma non ha alcuna relazione con nessun particolare linguaggio di programmazione.

Risposte:


78

Supponendo che i gusti regolari di regex in stile PCRE:

Se vuoi verificarlo come una singola parola intera , è \bTest\b, con flag appropriati per l'insensibilità tra maiuscole e minuscole, se lo desideri, e delimitatori per il tuo linguaggio di programmazione. \brappresenta un "confine di parola", cioè un punto tra i caratteri in cui si può considerare che una parola inizi o termini. Ad esempio, poiché gli spazi vengono utilizzati per separare le parole, ci sarà un confine di parola su entrambi i lati di uno spazio.

Se vuoi verificarlo come parte della parola , è solo Test, di nuovo con i flag appropriati per l'insensibilità tra maiuscole e minuscole. Notare che di solito, i metodi di "sottostringa" dedicati tendono ad essere più veloci in questo caso, perché rimuove l'overhead di analizzare la regex.


1
" \brappresenta un" confine di parola ", cioè qualcosa che separa due parole (ad esempio uno spazio)." \bnon corrisponde a uno spazio; è un'asserzione che corrisponde tra i caratteri (o all'inizio o alla fine di una riga, nella maggior parte dei casi).
strager

1
@strager: Sì, hai ragione - la mia spiegazione era un po 'imprecisa. Modifico io.
Michael Madsen

117

Basta non ancorare il tuo modello:

/Test/

L'espressione regolare sopra verificherà la presenza della stringa letterale "Test" da qualche parte al suo interno.


2
Grazie, non sapevo fosse così semplice! Sicuramente non l'ho visto nel mio Google. Cosa intendi con non ancorare il mio schema?
GurdeepS

7
È possibile ancorare un modello in modo che corrisponda all'inizio o alla fine di una stringa, ad esempio / ^ Test / o / Test $ / rispettivamente o anche / ^ Test $ / per corrispondere esattamente. L'esempio è fatuo perché non fornisce alcun vantaggio rispetto al confronto per l'uguaglianza, ma ad esempio quando si esegue la convalida del campo del modulo un'espressione regolare come / ^ \ d + $ / corrisponderà solo se il campo contiene almeno una cifra e nient'altro che cifre numeriche.
David Clarke

-13

Sono in ritardo di qualche anno, ma perché no?

[Tt][Ee][Ss][Tt]

4
Questa risposta è stata trovata nella coda delle revisioni di bassa qualità, presumibilmente perché non hai spiegato il codice. Se lo spieghi (nella tua risposta), è molto più probabile che tu riceva più voti positivi e l'interlocutore impara davvero qualcosa!
Il ragazzo con il cappello

6
Questo non è molto generalizzabile: immagina se la parola che dovevi cercare provenisse da un utente. Dovresti generare il [Aa]modello per ogni lettera e diventerebbe piuttosto brutto abbastanza velocemente.
Platinum Azure
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.