Как получить самое короткое, а не самое длинное из возможных регулярных выражений с помощью preg_match () - PullRequest
8 голосов
/ 05 мая 2011

У меня есть строка, похожая на эту:

{{something1}} something2 {{something3}} something4

Как мне сопоставить только "что-то1" с помощью функции preg_match()?

Я пытался:

preg_match("/\{\{(.*)\}\}/si",$content,$matches);

но это слишком много, возвращая

something1}} something2 {{something3

Я пытался добавить \b к шаблону, но так и не получил желаемого.

Не могли бы вы помочь мне с этим?

Ответы [ 3 ]

19 голосов
/ 05 мая 2011

Использовать не жадный модификатор ?:

preg_match("/\{\{(.*?)\}\}/si",$content,$matches);
             here --^
1 голос
/ 27 марта 2013

полный ответ - если наш $ var равен:

STARTT 
FIRST KKK
SECOND KKK

1) Если мы используем:

$var = preg_replace('/STARTT(.*)KKK/', 'REPLACED-STRING', $var);

, он изменит все от STARTT до последнего KKK и Resultбудет:

REPLACED-STRING

2) Если мы используем:

$var = preg_replace('/STARTT(.*?)KKK/', 'REPLACED-STRING', $var);

Результат будет:

REPLACED-STRING 
SECOND KKK
0 голосов
/ 05 мая 2011

Попробуйте это:

preg_match('|{{([^}]+)}}|si', $content, $matches);

echo $matches[1];
...