Regex не работает с несколькими строками - PullRequest
2 голосов
/ 18 сентября 2009
$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!";

Я анализирую документ XML. Вышеуказанное регулярное выражение работает, если в описании нет разрывов строк, но как мне заставить его работать, даже если есть разрывы строк?

Ответы [ 4 ]

4 голосов
/ 18 сентября 2009

Страница справочника " Модификаторы " может вас заинтересовать, особенно это касается модификатора s (PCRE_DOTALL):

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

Ваше регулярное выражение станет примерно таким:

$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!s";

Примечание. Я добавил модификатор 's' после конечного разделителя.

1 голос
/ 19 сентября 2009

Почему вы используете регулярные выражения для анализа XML? Почему бы не использовать simplexml_load_string, чтобы загрузить документ XML и "пройтись" по нему. Это будет менее подвержено ошибкам, чем сложные операторы регулярных выражений, если только вы не собираетесь делать простую замену.

0 голосов
/ 18 сентября 2009

Вам необходимо добавить модификатор s (DOTALL) :

$regpattern4 = "!(.*)<\/media:description>!s";
0 голосов
/ 18 сентября 2009

Попробуйте

 preg_match("/pattern/s", $text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...