String.contains
String.containsString, nokta ile çalışır. Normal ifadeyle çalışmaz. Belirtilen tam String'in geçerli String'de görünüp görünmediğini kontrol edecektir.
String.containsKelime sınırını kontrol etmediğini unutmayın ; sadece alt dizeyi kontrol eder.
Regex çözümü
Normal ifade, String.containsanahtar kelimelere (diğer şeylerin yanı sıra) kelime sınırı uygulayabileceğinizden daha güçlüdür . Bu, anahtar kelimeleri alt dizeler yerine sözcükler olarak arayabileceğiniz anlamına gelir .
String.matchesAşağıdaki normal ifadeyle kullanın :
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW regex (dize değişmezinde yapılan kaçışları kaldırın - yukarıdaki dizeyi yazdırdığınızda elde ettiğiniz şey budur):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
\bEğer bir eşleşme alamadım böylece kelime sınırı olup olmadığını kontrol eder, restores store products. Rakamdan dolayı stores 3store_productreddedildiğini ve _bir kelimenin parçası olarak kabul edildiğini unutmayın, ancak bu durumun doğal metinde göründüğünden şüpheliyim.
Kelime sınırı her iki taraf için de kontrol edildiğinden, yukarıdaki normal ifade tam kelimeleri arayacaktır. Başka bir deyişle, stores stores productkelimenin arıyor beri, yukarıdaki regex maç olmayacak storeolmadan s.
.normalde birkaç yeni satır karakteri dışında herhangi bir karakterle eşleşir . Başlangıçta istisnasız herhangi bir karakterle eşleşmeler yapar (bunu işaret ettiği için Tim Pietzcker'a teşekkürler).(?s).
(?s)Dize yeni satırlar içeriyorsa, normal ifadenizin başına eklemek isteyebilirsiniz .