2015-01-14 2 views
1

я пытаюсь разобрать тег из строки, как следующее:новичок: PHP не preg_match_all работает, как ожидалось

$string = "foo [cmd:tag1] bar [cmd:tag2] bla bla"; 
$pattern = "/\[cmd:(.+)\]/"; 
preg_match_all($pattern, $string, $matches, PREG_OFFSET_CAPTURE); 
$rc = $matches[0]; 
foreach($rc as $tag) 
{ 
    print_r2($tag); 
} 

который будет возвращать:

Array 
(
    [0] => [cmd:tag1] bar [cmd:tag2] 
    [1] => 4 
) 

что неправильно в моем синтаксисе, я жду следующий результат:

Array 
(
    [0] => [cmd:tag1] 
    [1] => [cmd:tag2] 
) 

благодаря

ответ

3
\[cmd:(.+?)\] 

или использовать

\[cmd:([^\]]*)\] 

Сделайте свой квантор * не жадный, поставив ? впереди.

См. Демонстрационную версию.

https://regex101.com/r/fA6wE2/23

Смежные вопросы