簡體   English   中英

如何在PHP中使用正則表達式匹配所有術語?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM