2015-09-13 5 views
-2

У меня есть следующий PHP строка:PHP Regex для вложенных моделей

$str = "a b [[c], [d] then [e]] followed by [f] then [g]"; 

Я пытаюсь написать 2 выражения в PHP; один для извлечения [c], [d], [e] (включая квадратные скобки) и второго регулярного выражения для извлечения [f] и [g] (включая скобки).

Бонусные баллы для всех, кто может сделать это с пробелом, добавленным до или после квадратной скобки.

У кого-нибудь есть идеи?

Спасибо :)

+0

http://stackoverflow.com/questions/133601/can-regular-expressions-be-used-to-match-nested-patterns – tiguchi

+1

Каков ваш ожидаемый результат, если входной сигнал '[fs [sc] [sc [ gf]]] '? –

+0

Какие-нибудь попытки? Если это всего лишь два уровня скобок, тогда даже не требуется вложенный шаблон. – mario

ответ

0

Вы можете попробовать с помощью этого простого и читаемым регулярных выражений (для двух уровней только и сбалансированных скобках):

(?|(?<=\[)[^\[\]]*(?<nested>\[[^\[\]]+\])[^\[\]]*|(?<=(?!\A)\G)(\[[^\[\]]*\])[^\[\]]*(?=(?:[^\[\]]*\[[^\[\]]+\])*\])|(?<=(?!\A)\G)[^\[\]]*(\[[^\[\]+]\])[^\[\]]*(?=\]))|(?<simple>\[[^\[\]]+\]) 

DEMO

Я довольно уверен, что там (возможно, лучший) способ сделать это без регулярного выражения, но так я буду делать это с регулярным выражением. Вероятно, есть и лучший способ сделать это с регулярным выражением: D

О whitspaces до и после скобок, я не знаю, что вы имеете в виду: внутри или снаружи скобки? добавлять whitspaces или сопоставлять whitspaces, если его occour до или после скобки?

Смежные вопросы