我正在尝试执行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&g=js' (length=20)
1 => string 'abc.php?v=2&g=js' (length=20)
2 => string 'amp;' (length=4)
但是,我只希望输出只是匹配数组中的以下内容。
0 => string 'abc.php?v=2&g=js' (length=20)
另外,如果我的$ text匹配多个模式,我希望能够看到所有这些模式。
答案 0 :(得分:0)
只需将群组设为非抓取,(?:...)
而不是(...)
:
$pattern_array = array('abc\.php\?v=\d+&(?:amp;)?g=js', 'xyz\.php');
// ___^^
$pattern = '/(?:' . implode('|', $pattern_array) . ')/i';
// ___^^