Regex, сопоставлять переводы строк между тегами - PullRequest
0 голосов
/ 17 июня 2009

У меня есть это регулярное выражение в PHP:

preg_match('/\[summary\](.+)\[\/summary\]/i', $data['text'], $match);

Хорошо работает, когда текст между тегами сводки находится в одной строке. Однако, когда он содержит переводы строки, он не совпадает.

Я попытался найти правильный модификатор здесь: http://nl2.php.net/manual/en/reference.pcre.pattern.modifiers.php Но единственный, связанный с символами новой строки, это "m", и это не делает то, что я хочу.

Как заставить это работать?

Ответы [ 2 ]

2 голосов
/ 17 июня 2009

Страница man, на которую вы ссылаетесь, описывает другие параметры, которые влияют на обработку разрывов строк.

s (PCRE_DOTALL) Если этот модификатор установлен, метасимвол точки в шаблоне соответствует всем символам, включая новые строки . Без этого новые строки исключаются. Этот модификатор эквивалентен модификатору Perl's / s. Отрицательный класс, такой как [^ a], всегда соответствует символу новой строки, независимо от установки этого модификатора.
0 голосов
/ 17 июня 2009

Регулярные выражения в принципе плохо разбирают HTML (см. . Можете ли вы привести некоторые примеры того, почему трудно анализировать XML и HTML с регулярным выражением? , почему). Что вам нужно, это HTML-парсер. См. Можете ли вы привести пример разбора HTML с вашим любимым парсером? для примеров использования различных парсеров.

Вы можете найти этот ответ , который использует SimpleXML полезным.

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