preg_match字符串中的所有单词

时间:2014-04-30 06:51:42

标签: php preg-match

有可能检测$string是否与$array中的所有单词匹配。 预先不知道的单词顺序(用户输入的文本)。

array(
  'test',
  'shmest',
  'zest',
  'fest',
  'etcest'
);

我承诺我可以:

$is_match = true;
foreach ($array as $word) {
  if (!strpos($string, $word) === false) {
    $is_match = false;
    break;
  }
}

(可以|应该)我通过preg_match [_all]做出如上所述的事情吗?

EDIT1

优先级是内存和快速工作。

测试了2个unswers并拥有上面的内容 https://eval.in/144266 所以我的速度最快

$string可以包含任何符号

2 个答案:

答案 0 :(得分:3)

您可以使用LookAheads创建一个RegEx:

$regex='/(?=.*?'.implode(')(?=.*?', $needles).')/s';

然后对你的字符串进行简单的检查:

if (preg_match($regex,$string)===1) echo 'true';

演示代码:https://eval.in/144296
RegEx:http://regex101.com/r/eQ0hU4

答案 1 :(得分:2)

使用preg_split()array_intersect()

$words = preg_split("/(?<=\w)\b\s*/", $input, -1, PREG_SPLIT_NO_EMPTY);
echo (array_intersect($arr, $words) == $arr) ? 'True' : 'False';

基本上preg_split()将输入字符串拆分为单词数组。 array_intersect()检查$arr中是否存在$words中的所有元素。

Demo