[英]How can I match ALL terms using Regular Expressions in PHP?
我想出了如何檢查OR的情況, preg_match( "/(word1|word2|word3)/i", $string );
。 我不知道如何匹配AND大小寫。 我想檢查字符串是否包含所有術語(不區分大小寫)。
可以使用lookahead在單個正則表達式中進行AND匹配,例如:
preg_match('/^(?=.*word1)(?=.*word2)(?=.*word3)/i', $string)
但是,僅在regex之外執行它可能更清晰,也許更快:
preg_match('/word1/i', $string) && preg_match('/word2/i', $string) && preg_match('/word3/i', $string)
或者,如果您的目標字符串像word1
一樣簡單:
stripos($string, 'word1')!==FALSE && stripos($string, 'word2')!==FALSE && stripos($string, 'word3')!==FALSE
我正在考慮您的問題中可能會導致使用和案例出現問題的情況:
這是情況
words = "abcd","cdef","efgh"
確實必須匹配字符串:
string = "abcdefgh"
也許您不應該使用REG.EXP
如果您知道這些字詞出現的順序,則可以使用以下內容:
preg_match("/(word1).*(word2).*(word3)/i", $string);
如果未定義術語順序,則最好使用3個單獨的表達式並檢查它們是否都匹配。 單個表達式是可能的,但可能很復雜。
preg_match( "/word1.*word2.*word3)/i");
這可行,但必須按規定的順序出現,您當然可以替換preg_match("/(word1.*word2.*word3|word1.*word3.*word2|word2.*word3.*word1| word2.*word1.*word3|word3.*word2.*word1|word3.*word1.*word2)/i");
但是那真是太讓人難以置信了,你必須要瘋了!,只使用strpos($haystack,$needle);
會更好strpos($haystack,$needle);
循環或多個正則表達式匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.