簡體   English   中英

PREG_MATCH檢查所有單詞和條件

[英]PREG_MATCH check all words and condition

我寫了一個正則表達式,它以OR條件搜索搜索詞,使得三個單詞都具有字符串形式,而與它們的順序無關。 現在,我只想放置一個AND條件,因為我想以不同順序將所有三個單詞同時獲得。

這是我的preg_match()常規表達式。

$myPregMatch = (preg_match("/\b^(Word1|Word2|Word3)\b/", "Word4 Word2 Word1 Word3 Word5 Word7"));
 if ($myPregMatch){
    echo  "FOUND !!!";
 }

我想在字符串"Word4 Word2 Word1 Word3 Word5 Word7"中找到所有單詞的順序不同。 如果樣本字符串是"Word5 Word7 Word3 Word2"則不應返回。

您需要錨定先行:

^(?=.*\bWord1\b)(?=.*\bWord2\b)(?=.*\bWord3\b)

觀看演示

如果輸入字符串中包含換行符,則需要使用/s修飾符。

這是一個IDEONE演示

$re = '/^(?=.*\bWord1\b)(?=.*\bWord2\b)(?=.*\bWord3\b)/'; 
$str = "Word4 Word2 Word1 Word3 Word5 Word7"; 

$myPregMatch = (preg_match($re, $str));
 if ($myPregMatch){
    echo  "FOUND !!!";
 }

結果:發現FOUND !!!

檢查每個單詞可能更快

$string = "Word4 Word2 Word1 Word3 Word5 Word7";  // input string

$what = "Word2 Word1 Word3";                      // words to test
$words = explode(' ', $what);                     // Make array

$i = count($words);
while($i--) 
   if (false == strpos($string, $words[$i])) 
     break;

$result = ($i==-1);   // if $i == -1 all words are present in input string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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