Есть ли токен для захвата разрывов строк в многострочном регулярном выражении?

Я уже несколько раз сталкивался с этой проблемой, когда пытался выполнить очистку html с помощью php и функций preg*.

Большую часть времени мне приходится захватывать такие структуры:

<!-- comment -->
<tag1>lorem ipsum</tag>

<p>just more text with several html tags in it, sometimes CDATA encapsulated…</p>
<!-- /comment -->

В частности, я хочу что-то вроде этого:

/<tag1>(.*?)<\/tag1>\n\n<p>(.*?)<\/p>/mi

но \n\n не похоже, что это сработает.

Есть ли общий выключатель линии?


person Jens Kohl    schedule 04.07.2009    source источник


Ответы (3)


Я думаю, вы могли бы заменить \n\n на (\r?\n){2} таким образом, чтобы вы захватили пару CRLF, а не только символ LF.

person Paulo Santos    schedule 04.07.2009

Вы уверены, что хотите анализировать HTML с помощью регулярных выражений? HTML не является регулярным, и в нем слишком много угловых случаев.

Я бы исследовал какую-нибудь форму синтаксического анализатора HTML (возможно, этот ?), а затем идентифицировал шаблон, который вы интересует через возвращенную структуру данных HTML.

person Brian Agnew    schedule 04.07.2009
comment
На сегодняшний день очистка с использованием регулярных выражений работала нормально для меня. Но спасибо за ссылку. - person Jens Kohl; 04.07.2009

Или вы можете посмотреть расширение Dom для php. У него есть функция для загрузки html из строки или файл. Затем вы можете использовать методы php dom для обхода dom и поиска интересующих вас данных.

person timmow    schedule 04.07.2009