используя preg_match_all для вложенных скобок - PullRequest
0 голосов
/ 03 апреля 2011

У меня есть такая строка:

Это {{text}} для {{testing}} PHP {{регулярное выражение}}

Я использую следующий шаблон, чтобы получить массив, содержащий {{text}}, {{testing}}, {{регулярное выражение}}

/\{\{.+\}\}/

Но он возвращает массив только с 1 элементом:

"{{text}} для {{testing}} php {{регулярное выражение}}"

Также попробовал это:

/\{\{(?R)|.+\}\}/

Но я получаю тот же результат.

Что не так с этим шаблоном?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

Попробуйте использовать /\{\{.+?\}\}/, обратите внимание на?, Оригинал жадный, это означает, что он будет соответствовать как можно большему числу символов, а если у вас есть. + Это означает, что он перейдет от первого {к последнему}.

+?, *? - это нежадные версии + и *.

0 голосов
/ 26 июня 2014

Я думаю, что более быстрым решением было бы регулярное выражение /\{\{([^}]+)\}\}/, потому что негладкий квантификатор получает букву за буквой, пока не достигнет правой скобки, в то время как это регулярное выражение с первого раза пожирает все до правой скобки.1004 *

Кроме того, я думаю, что ОП хочет работать с совпадающим результатом, поэтому добавили соответствующие круглые скобки вокруг [^}]+.

...