2013-07-22 2 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'; 
//   ___^^