Застрял с регулярным выражением - PullRequest
1 голос
/ 09 декабря 2011

Я застрял с функцией 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].Есть идеи?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2011

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

1 голос
/ 09 декабря 2011

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

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

1 голос
/ 09 декабря 2011

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

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

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

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

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

0 голосов
/ 09 декабря 2011

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

...