preg_replace this: {{1} {2} {3} {..}} — Вероятно, это простая проблема PHP / preg_replace / RegEx, но я честно озадачен

Работая над личным проектом, я использую PHP, и я хотел бы запустить preg_replace_callback функция против следующих строк:

1. {{hello}}
2. {{hello}{there}{how}{are}{you}}

Я хотел бы обнаружить hello there how are а также you и отправить в функцию как $matches[0-4] (или сколько бы их ни было, должно быть от 1 до бесконечности).

Вышесказанное не так уж сложно для меня, но мне бы тоже понравилось, если я пропущу эту строку:

3. {{hello}{there}{how}{are}{you}} blabla {{I}{Am}{Fine}{Thanks for asking}}

Функция, которую я посылаю $matches[0-X] он должен запускаться ДВАЖДЫ, так как созданная мною маленькая {{}} система открывается и закрывается дважды!

Шаблон также должен игнорировать {текст как таковой сам по себе}, но НО ДОЛЖЕН работать для {{текст, подобный этому, то есть только один блок}}.

Если я могу напечатать вещи с косой чертой в качестве условия, например:

4. {{ignore this next closing curly bracket \} as the slash makes it text}

…И он также может затем удалить эту ненужную обратную косую черту … ну … ЧТОБЫ ПОЛУЧИТЬ МАССОВЫЕ БОНУСНЫЕ ТОЧКИ !!

Все это preg_replace_callback тоже, поэтому мне нужно заменить весь {{thing} {here}} тем, что возвращает функция.

Это просто? Или сложно? Я застрял!

Люблю учиться, хотя, если бы кто-нибудь мог мне помочь, это было бы более ценно, чем вы могли себе представить. Спасибо!

EDIT p.s. Если это слишком сложно сделать, как я объяснил выше, я бы согласился, что это работает для чего-то вроде:

[{hello}{there}{how}{are}{you}]

Использование квадратных скобок, а также фигурных — но это гораздо менее желательно …

2

Решение

Переменное количество групп захвата невозможно; тем не менее, вы можете выполнить глобальное сопоставление и сопоставить их все (было бы почти невозможно увидеть, пришло ли оно из первой или второй группы, например, с примером № 3):

(?:\G(?!\A)|\{)[^}]*?\K\{(.*?)(?<!\\)\}

демонстрация


Постскриптум Вот пример выражения, чтобы показать, почему группы захвата переменных невозможны. Группа повторного захвата будет заменяться каждым совпадением, и содержимое будет совпадать с содержимым финального совпадения: (a)+bc

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]