Возникли проблемы с этим регулярным выражением в PHP - PullRequest
4 голосов
/ 03 декабря 2011

Я пытаюсь запустить регулярное выражение для следующей строки с PHP с помощью функции preg_match_all

"{{content 1}} {{content 2}}"

Результат I 'm ищет массив с 2 совпадениями внутри {{и}}

Вот выражение '/\{\{(.+)\}\}/'

Я подозреваю, что мое выражение слишком жадное, но как сделать его менее жадным

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011

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

$regex = '/\{\{.*?\}\}/';

Новое регулярное выражение выведет:

Array
(
    [0] => Array
        (
            [0] => {{content 1}}
            [1] => {{content 2}}
        )

)

РЕДАКТИРОВАТЬ:

Просто вспомнил другой способ сделать это.Вы можете просто добавить U (заглавную u) в конец строки регулярного выражения, и результат будет таким же, например, так:

$regex = '/\{\{.+\}\}/U';

Кроме того, вот полезный список регулярных выражениймодификаторы .

1 голос
/ 03 декабря 2011

Вы также можете использовать модификатор URE PCRE (Ungreedy)

0 голосов
/ 03 декабря 2011

Является ли строка регулярного выражения строкой PHP в одинарных или двойных кавычках? Потому что, если строка в двойных кавычках, фигурные скобки содержат переменные, поэтому их необходимо экранировать дважды.

"/\\{\\{(.+)\\}\\}/"
...