PHP удалить все HTML, но комментарии - PullRequest
0 голосов
/ 18 марта 2011

Как бы удалить все входные данные html, кроме комментариев?Например: это <html><body><!-- hello paragraph --><p>hello</p></body></html> превратится в это: это <!-- hello paragraph -->

Как бы я это сделал?Спасибо!

Редактировать: Я знаю, что вы можете делать такие вещи с помощью регулярных выражений, но я не знаю как.

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Вместо замены HTML я бы извлек все комментарии, используя:

preg_match_all('#(<!--.*?-->)#s', '<html><body><!-- hello paragraph --><p>hello</p></body></html>', $m);
0 голосов
/ 18 марта 2011
$foo="<html><body><!-- hello paragraph --><p>hello</p></body></html>";
preg_match('/(\<|<)!--(\s*.*?\s*)--(\>|>)/m',$foo,$result);
print_r($result);
0 голосов
/ 18 марта 2011

Это действительно немного сложнее, но выполнимо с регулярными выражениями:

$text = preg_replace('~<(?!!--)/?\w[^>]*(?<!--)>~', "", $text);

Это работает на вашем примере, но может не сработать для других. Забавно, но также удаляет HTML-теги из комментариев.

$regex = '~
    <             # opening html bracket
    (?!!--)       # negative assertion, no "!--" may follow
    /?\w          # tags must start with letter or optional /
    [^>]*         # matches html tag innards
    (?<!--)       # lookbehind assertion, no "--" before closing >
    >             # closing bracket
 ~x'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...