Застрял с регулярным выражением

Я застрял с функцией php preg_match_all. Может, кто-нибудь поможет мне с регулярным выражением. Предположим, у нас есть код:

[a]a[/a]
[s]a[/s]
[b]1[/b]
[b]2[/b]
...
...
[b]n[/b]
[e]a[/e]
[b]8[/b]
[b]9[/b]
...
...
[b]n[/b]

Мне нужно сопоставить все, что находится внутри тегов [b], расположенных между тегами [s] и [e]. Любые идеи?


person Mike Sallivan    schedule 08.12.2011    source источник
comment
Вы говорите о сопоставлении содержимого тега [b] между двумя тегами [s] ИЛИ двумя тегами [e] или между тегом [s] И тегом [e]?   -  person smitec    schedule 09.12.2011
comment
Я имею в виду И. В приведенном выше примере результат должен быть: 1,2, .., n   -  person Mike Sallivan    schedule 09.12.2011
comment
Не могли бы вы привести пример того, каким вы хотите получить результат с учетом вашего вклада?   -  person jwd    schedule 09.12.2011


Ответы (4)


если ваша структура точно такая же, как указано выше, я бы лично избегал регулярных выражений (не очень хорошая идея с этими языками) и просто проверял второй символ каждой строки. Как только вы увидите s, перейдите в режим потребления и для каждой строки, пока не увидите e, найдите первый ] и прочтите все, что находится между этим и следующим [

person smitec    schedule 08.12.2011

Для простоты используйте два вызова preg_match.

Сначала получить список, который вы хотите проверить /\[s](.+?)\[e]/s.
А затем использовать эту строку результата и сопоставить содержащиеся /\[b](.+?)\[\/b]/s вещи.

person mario    schedule 08.12.2011
comment
любой способ сделать это за один шаг? - person Mike Sallivan; 09.12.2011

Похоже, вы пытаетесь сопоставить шаблон с чем-то, что имеет древовидную структуру, по сути, как HTML или XML. Каждый раз, когда вы говорите «найдите X, расположенный внутри совпадающих тегов Y», у вас будет эта проблема.

Попытка проделать такую ​​работу с регулярными выражениями - плохая идея.

Вот некоторая информация, скопированная / вставленная из другого моего ответа на аналогичный вопрос:

Некоторые ссылки на похожие сообщения SO, которые дадут вам представление о трудностях, в которые вы попадаете:

«Правильная вещь», которую нужно сделать, - это проанализировать ваш ввод, сохраняя состояние по мере продвижения. Это может быть так же просто, как сканирование вашего текста и сохранение стопки текущих тегов.

person jwd    schedule 08.12.2011

Одних регулярных выражений недостаточно для синтаксического анализа XML, и здесь это упрощенный язык XML.

person StilesCrisis    schedule 08.12.2011