2

複数のパターンの場合、同じ配列インデックスの下でpreg_matchの結果を返すことが可能でした。つまり、次のpreg_matchがあり、さまざまなサブ文字列(、、)での出現をチェックしてい'&q'ます。 '?q''&keywords'

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

次のステートメント $matches[1]を除外できるように、以下のすべてのオカレンスを確認したいと思います。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 に答える