2012-03-13 33 views
8

Belirli kelimeler içerdiğini görmek için bir dizeyi test etmek istiyorum.Çoklu kelimeler için preg_match

yani:

$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); 

Ama bu yöntem yalnızca bir kelime ile eşleşir. Birden çok kelimeyi nasıl kontrol ederim? gibi

+3

preg_match_all() –

+0

Düzenlenen soru – Autolycus

cevap

15

şey:

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

bakın dönmez lütfen neyi # \ s – Autolycus

+0

@Autolycus ben bir boşluk '\ s' eklemek için gidiyordu yok mu kelimelerin etrafında, ama sonra zaten bir kelime sınırı kullandığını fark ettim. – jeroen

+0

@Outolycus Başlangıçta ve sondaki # # 'regex'in başlangıcını ve sonunu işaret eder ve gerekli olduğunda (bu veya diğer herhangi bir karakter), böylece anahtarlar, duyarsız eşleşme için' # i 'gibi anahtarlar ekleyebilirsiniz. – jeroen

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

Eksik ayraçları görmek ve birden fazla değer –

+0

Düzenlenen soru – Autolycus

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

Bir "veya" bir regex olarak boru karakterini (|) kullanabilir.

Sadece sözcüklerin herhangi birinin olup olmadığını bilmek istiyorsanız, yukarıdaki gibi preg_match kullanın. Eğer kelimelerin herhangi tüm tekrarlarını eşleşmesi gerekiyorsa, preg_match_all kullanın:

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

Sonra $matches değişkeni kontrol edin.