0

次のデータセットがあります。

names = ["brad pitt", "george clooney", "james cameron"];

指定された「ブラッド・ピット」と「ジョージ・クルーニー」に一致する正規表現が必要です。

"brad peter clooney"

また、一致する必要があります。"brad pitt"クエリが、"brad peter pitt"

私は PHP を使用しており、クエリを分割して操作できることに注意してください。たとえば、私はこれを試すことができます:

((brad)+.*(peter)+.*(pitt)+.*+)

ただし、各名前の後に1つ以上あるため、一致しません.*(0以上)を置くと、何も一致しないことも意味するため、すべてのレコードに一致します.

4

2 に答える 2

0

ここに簡単なアイデアがあります:

$arr = array("brad pitt", "george clooney", "james cameron");
$str = "brad peter clooney";

foreach($arr as $val)
{
   $tmpptrn = str_replace(" ", "|", $val);
   $pattern = "/($tmpptrn)/i";

   if(preg_match_all($pattern, $str, $matches))
   {
       //do whatever with the results

       $match = $matches[1][0];
       if(!empty($match))
       {
           $arra[] = array_filter($arr, function($el) use ($match) { return ( strpos($el, $match) !== false ); });

       }

   }
}

//print out the results
print_r($arra);
于 2013-05-31T05:50:05.120 に答える
0

そのため、文字列に単語が含まれている場合は、文字列と一致させたいと考えています。そのために、文字列を分割して、次\s+のような式で各単語を使用できます。

word1|word2|word3

\bいくつかの とを追加することもできます/i。たとえば (//今回は引用):

/\b(?:word1|word2|word3)\b/i

indexOf()または、3 つの別々の式またはチェックを使用することもできます。

于 2013-05-31T05:21:03.480 に答える