在字符串数组中搜索

时间:2010-05-02 05:22:12

标签: php string preg-match

好的,我在这里感到迟钝,

我有一个像这样的字符串:

$string = 'function module_testing() {';

或者可能是这样的:

$string = 'function module_testing()';

或者可能是这样的:

$string = 'function module_testing($params) {';

或者这个:

$string = 'function module_testing($params, $another = array())';

以及更多方式......

而且我有一个像这样的字符串数组:

$string_array = array('module_testing', 'another_function', 'and_another_function');

现在,我是否可以使用某种preg_match来测试在$string_array字符串中是否在任何给定位置找到任何$string值?所以在这种情况下,会有一场比赛。或者有更好的方法吗?

我无法使用in_array,因为它不是完全匹配,如果我能帮助它,我宁愿不对它进行foreach循环,因为它已经在{{1}循环。

谢谢:)

1 个答案:

答案 0 :(得分:2)

这里的foreach循环是合适的解决方案。它不仅是最可读的,而且是循环三个值。在while循环中发生的事实不是问题。

foreach ($string_array as $v) {
  if (strpos($string, $v) !== false) {
    // found
  }
}

您也可以使用正则表达式:

$search = '\Q' . implode('\E|\Q', $string_array) . '\E';
if (preg_match('!$search!`, $string)) {
  // found
}

这有两个部分。首先,有|语法:

a|b|c

表示查找abc。第二部分是:

\Q...\E

它逃脱了内容。这意味着如果您的搜索字符串包含任何正则表达式特殊字符(例如(),那么正则表达式仍然可以正常工作。

最终,虽然我看不到这比foreach循环更快。