PHP регулярное выражение замены пользовательских строковых переменных - PullRequest
0 голосов
/ 07 февраля 2019

Есть ли какое-то решение, как я могу разобрать эту строку на 3 секции?

{ROW.{TABLE.{TEMP.lang}}}

На это

{ROW.{TABLE.{TEMP.lang}}}
{TABLE.{TEMP.lang}
{TEMP.lang}

Например, когда Iam пытается заменить TABLE.переменная

{TABLE\.(.+)} = 1 => {TABLE.{TEMP.lang}}} 2 => {TEMP.lang}}
{TABLE\.(.+?)} = 1 => {TABLE.{TEMP.lang} 2 => {TEMP.lang

Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2019

То, что вы пытаетесь сделать, это рекурсивное совпадение.Как я уже говорил в своем комментарии, есть похожие ответы на вопросы, которые могут работать для вас (если они адаптированы) здесь и здесь .

Для вашего случая,Я адаптировал этот ответ для вашей ситуации, в результате чего следующий RegEx:

(?=(\{(?>[^{}]+|(?1))+\}))

Я заменил скобки (предыдущего решения) для фигурных скобок, а затемзаключил всю группу захвата в позитивную перспективу.Так как lookarounds не потребляют никаких символов , движок будет пытаться сопоставить строку.Кроме того, если вы включите утверждение в предпросмотр внутри группы захвата, выражение будет «согласовано» (но не использовано), и вы сможете извлечь его из групп захвата.Таким образом, возможно сопоставить ваш шаблон несколько раз, что даст вам ожидаемые результаты.

Regex101 demo: https://regex101.com/r/nsypuX/1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...