2013-07-22 78 views
0

我想執行一個preg_match來獲取模式的完整匹配,並且我不需要子匹配。PHP 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) 

此外,如果我的$文本匹配多個模式,我希望能夠看到所有這些模式。

+0

我不明白爲什麼你把你的模式成一個單一的元素數組,然後試圖破滅了。你能澄清你的意圖嗎?也是你的問題簡單的試圖問如何編寫'echo $ matches [0]'? –

+0

我剛更新了代碼。原因,我把它放在數組中是我想能夠測試多個模式,並查看哪些模式匹配。 – Virendra

+0

爲什麼不循環遍歷模式或創建自己的函數,並返回匹配的模式?沒有辦法通過檢查'$ matches'結果來確定匹配的模式。 –

回答

0

只是使集團非捕獲的(?:...)代替(...)

$pattern_array = array('abc\.php\?v=\d+&(?:amp;)?g=js', 'xyz\.php'); 
//         ___^^ 
$pattern = '/(?:' . implode('|', $pattern_array) . ')/i'; 
//   ___^^