0

一致する単語の配列があります:

$search = array("lorem","dolor","sit");

そして、検索する配列:

 $results= array(
       "Lorem ipsum dolor sit amet, consectetur",
       "Ut enim ad minim veniam, quis nostrud exercitation"
       "Duis aute irure dolor in reprehenderit in voluptate velit esse"
       "Excepteur sint occaecat cupidatat non proident"
    );

指定された単語の 2 つが一致する場合にtrueを返す正規表現はありますか?

4

2 に答える 2

1

\b正規表現で単語境界を使用できます。

単語境界は、\w と \W (非単語文字) の間の位置、または文字列が単語文字で (それぞれ) 開始または終了する場合は、文字列の先頭または末尾です。

だから多分このようなもの..

foreach ($results as $result) {
   $pattern = "/\b(" . implode('|', $search) . ")\b/i";
   $found   = preg_match_all($pattern, $result, $matches);

   if ($found) {
     print_r($matches[0]);
   }
}

または、検索配列を廃止して、正規表現として使用することもできます。

foreach ($results as $result) {
   $found = preg_match_all("/\b(?:lorem|dolor|sit)\b/i", $result, $matches);
   if ($found) {
     print_r($matches[0]);
   }
}

出力:

Array
(
    [0] => Lorem
    [1] => dolor
    [2] => sit
)
Array
(
    [0] => dolor
)
于 2013-09-21T00:07:35.953 に答える
0

これで検索する正規表現を生成できます

$regex = '/(' . implode('|', $search) . ')/i';

どっちが:

/(lorem|dolor|sit)/i

/iケースレスになります。

の戻り値を使用してpreg_match_all()、一致した単語の数を確認できます。

于 2013-09-20T23:48:36.940 に答える