2

在多个模式的情况下,可以在同一数组索引下返回 preg_match 的结果。我的意思是我有以下 preg_match 什么是检查不同子字符串 ( '&q', '?q', '&keywords') 上的出现。

preg_match('/&q=(.+?)(&|$)|\?q=(.+?)(\&|$)|\&keywords=(.+?)(\&|$)/', urldecode($test_string), $matches); 

我想看看所有出现在$matches[1]to 下的情况都可以排除以下if语句。

if($matches){   
            if ($matches[1] != ''){
              $query_p = mysql_escape_string($matches[1]);      
            } elseif ($matches[3] != ''){   
              $query_p = mysql_escape_string($matches[3]);      
            } elseif($matches[5] != ''){
              $query_p = mysql_escape_string($matches[5]);
            }
         }
4

1 回答 1

3

简化您的正则表达式并将所有非预期捕获组转换为正则表达式中的非捕获组,如下所示:

/[?&](?:q|keywords)=([^&]+)(?:&|$)/

或者使用parse_str函数来解析查询字符串。

于 2012-12-17T08:58:40.437 回答