代码之家  ›  专栏  ›  技术社区  ›  SoLoGHoST

在字符串数组中搜索

  •  0
  • SoLoGHoST  · 技术社区  · 15 年前

    好吧,我在这里感觉很迟钝,

    我有一根这样的绳子:

    $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 如果我能帮上忙的话,我可以循环一下,因为它已经在 while 循环。

    谢谢:)

    1 回复  |  直到 15 年前
        1
  •  2
  •   cletus    15 年前

    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
    

    从里面逃出来。这意味着如果搜索字符串包含任何正则表达式特殊字符(例如 ( )那么regex仍然可以正常工作。

    虽然我看不出这比 foreach公司 循环。

    推荐文章