2009-09-18 2 views
2
$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!"; 

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

+0

Рассмотрите возможность использования DOM для синтаксического анализа XML. Он будет обрабатывать крайние случаи намного лучше, чем регулярное выражение. – TrueWill

+0

Вам не нужна обратная косая черта перед прямой косой чертой ... – PhiLho

ответ

0

Попробуйте

preg_match("/pattern/s", $text) 
4

Страница руководства "Pattern Modifiers" может заинтересовать, о том, что, особенно в сек (PCRE_DOTALL) модификатор:

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

Ваше регулярное выражение будет что-то вроде этого:

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

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

+0

+1 для описания –

1

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