0

パターンの完全な一致を取得するために preg_match を実行しようとしていますが、サブマッチは必要ありません。

私が使用しているコードは次のとおりです。

$text = 'abc.php?v=2&g=js';
// Pattern to check
$pattern_array = array('abc\.php\?v=\d+&(amp;)?g=js', 'xyz\.php');
$pattern = '/(' . implode('|', $pattern_array) . ')/i';
echo 'Pattern:' . $pattern . '<br />';
preg_match($pattern, $text, $matches);
if (!empty($matches)) 
{
    echo 'pattern found';
}
else
{
    echo 'pattern not found';
}
var_dump($matches);

次の出力が得られます。

Pattern: /(abc\.php\?v=\d+&(amp;)?g=js|xyz\.php)/i
pattern found
array (size=3)
  0 => string 'abc.php?v=2&amp;g=js' (length=20)
  1 => string 'abc.php?v=2&amp;g=js' (length=20)
  2 => string 'amp;' (length=4)

ただし、出力が一致する配列からの次のようになりたいだけです。

  0 => string 'abc.php?v=2&amp;g=js' (length=20)

また、私の $text が複数のパターンに一致する場合、それらすべてのパターンを表示できるようにしたいと考えています。

4

1 に答える 1

0

(?:...)次の代わりに、グループを非キャプチャとして作成します(...)

$pattern_array = array('abc\.php\?v=\d+&(?:amp;)?g=js', 'xyz\.php');
//                                    ___^^
$pattern = '/(?:' . implode('|', $pattern_array) . ')/i';
//         ___^^
于 2013-10-12T09:44:12.740 に答える