#php #regex #preg-match-all
#php #регулярное выражение #preg-match-all
Вопрос:
У вас есть какие-либо идеи, почему это регулярное выражение не соответствует приведенному ниже коду?
$regex = "!<title>(.*?)</title>!i";
код:
<b:include data='blog' name='all-head-content'/>
<title>
<b:if cond='data:blog.homepageUrl == data:blog.url'>
<data:blog.title/>
<b:else/>
<data:blog.pageName/> amp;raquo; <data:blog.title/>
</b:if>
</title>
<link href='http://fonts.googleapis.com/css?family=Open Sans:400,700' rel='stylesheet' type='text/css'/>
Ответ №1:
Не используйте регулярные выражения для синтаксического анализа XML.
Ваше выражение не работает, потому что точка не соответствует новым строкам. Добавление модификатора /.../s
DOTALL исправило бы это, но тогда у вас возникнут другие проблемы, такие как жадное сопоставление вместо ленивого.
Использование синтаксического анализатора XML было бы лучшей идеей.
Комментарии:
1. Является
b:include
допустимым тегом HTML?2. Спасибо, Марк, это решило мою проблему! Это шаблон blogger, который необходимо проанализировать и загрузить.
3. @hakre: это фрагмент документа HTML5 в пространстве имен XML?
4. Безусловно, нет 😉 Однако я думаю, что мой вывод также неверен. Даже если он будет находиться в пространстве имен XML, это будет недопустимый HTML5.
Ответ №2:
Вот мое предложение для правильного регулярного выражения:
(?<=<title>)(.*)(?=</title>)
Комментарии:
1. Я попробовал! Публикация без тестирования — это не моя работа!