2012-03-13 15 views
8

Voglio testare una stringa per vedere che contiene certe parole.preg_match per più parole

cioè:

$string = "The rain in spain is certain as the dry on the plain is over and it is not clear"; 
preg_match('`\brain\b`',$string); 

Ma questo metodo corrisponde una sola parola. Come posso verificare più parole?

+3

preg_match_all() –

+0

si rimanda alla domanda modificato – Autolycus

risposta

15

Qualcosa di simile:

preg_match_all('#\b(rain|dry|clear)\b#', $string, $matches); 
+0

cosa # \ s non – Autolycus

+0

@Autolycus stavo per aggiungere uno spazio '\ s' intorno alle parole, ma poi ho notato che hai già usato un limite di parole '\ b'. – jeroen

+0

@Autolycus I '#' all'inizio e alla fine segnano l'inizio e la fine della regex e sono necessari (quello o qualsiasi altro carattere) in modo da poter aggiungere interruttori alla fine, come '# i' per la corrispondenza senza distinzione tra maiuscole e minuscole. – jeroen

2
preg_match('\brain\b',$string, $matches); 
var_dump($matches); 
+0

delimitatori mancanti, e non restituisce più di un valore –

+0

vedere domanda modificato – Autolycus

3
preg_match('~\b(rain|dry|certain|clear)\b~i',$string); 

È possibile utilizzare il carattere pipe (|) come "o" in una regex.

Se è solo necessario sapere se una delle parole è presente, utilizzare preg_match come sopra. Se avete bisogno di abbinare tutte le occorrenze di una qualsiasi delle parole, utilizzare preg_match_all:

preg_match_all('~\b(rain|dry|certain|clear)\b~i', $string, $matches); 

Poi controllare la variabile $matches.