Regex для многострочных комментариев HTML (preg_match_all) - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть HTML-документ с несколькими закомментированными массивами PHP, например ::10000

<!-- Array
(
[key] => 0
)
-->

Используя PHP, мне нужно как-то разобрать HTML только для этих комментариев (есть другие комментарии, которые нужно будет игнорировать) и извлечь содержимое. Я пытался использовать preg_match_all, но мои навыки регулярных выражений невелики. Может ли кто-нибудь указать мне правильное направление?

Любая помощь очень ценится!

Ответы [ 3 ]

2 голосов
/ 06 апреля 2010

Три факта вступают в игру здесь

  1. В HTML-документе нет места, где мог бы отображаться литерал "<!--", а не означал бы комментарий (везде, где он был бы экранирован как "&amp;!--")
  2. вы, похоже, не хотите изменять содержимое документа, только находить в нем биты (поиск и замена имеет высокую вероятность взлома документа, а поиск не имеет)
  3. комментарии не могут быть вложены в HTML (в отличие от обычных тегов HTML) - в этом вся разница

Приведенная выше комбинация означает, что регулярные выражения могут использоваться для идентификации комментариев HTML.

Попробуйте это регулярное выражение: <!-- Array([\s\S])*?-->. Первая группа совпадений будет содержать все после "Array" вплоть до завершающей последовательности комментария.

Вы можете применить дальнейшую проверку работоспособности к найденным битам, чтобы убедиться, что они именно то, что вы ищете.

2 голосов
/ 06 апреля 2010

Как насчет использования анализатора HTML, который позволяет получить доступ к комментариям (например, Простой HTML DOM ), а затем проверять каждый комментарий на наличие новых строк, используя strpos .

$html = str_get_html('...HTML HERE...');
$comments = $html->find('comment');
foreach ( $comments as $comment ){
    if ( strpos($comment, "\n") !== false ){
        //process comment
    }
}
0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...