好的,我在这里感到迟钝,
我有一个像这样的字符串:
$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}循环。
谢谢:)
答案 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
表示查找a
,b
或c
。第二部分是:
\Q...\E
它逃脱了内容。这意味着如果您的搜索字符串包含任何正则表达式特殊字符(例如(
),那么正则表达式仍然可以正常工作。
最终,虽然我看不到这比foreach
循环更快。