Извлечь все в HTML-тег - PullRequest
       1

Извлечь все в HTML-тег

0 голосов
/ 23 октября 2011

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

#!/usr/bin/perl

my $text = '<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-    micr=osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=//www.w3.org  /TR/REC-html40"><head><META HTTP-EQUIV=3D"Content-Type" CONTENT==3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=oft Word 14 (filtered medium)">This is a test</HTML>';

my $html = "Add this first";
$text =~ /(<html .*>)(.*)/i;
print $text . "\n";

Что мне нужно сделать, так это чтобы текст между ними был извлечен в 1 доллар, а то, что осталось в 2 доллара. Затем я могу добавить свой текст, используя print $ 1 $ myhtml $ 2

Я просто не могу заставить его работать: (

Ответы [ 2 ]

4 голосов
/ 23 октября 2011

Вместо использования .*, который также будет соответствовать закрытию >, попробуйте [^>]*, который соответствует чему угодно, кроме закрытию >

Тем не менее, в целом регулярное выражение не является правильным способом для анализа HTML. Это просто не работает. Существует так много вариантов написания HTML, что вы столкнетесь с нелепым количеством проблем.

Настоящее решение состоит в том, чтобы проанализировать дерево DOM и найти то, что вы хотите таким образом. Попробуйте использовать XML-парсер .

0 голосов
/ 23 октября 2011
if ($subject =~ m!<html[^>]*>(.*?)</html>!) {
    $result = $1;
}

На что обратить внимание. Ваш ввод начинается с HTML и заканчивается HTML. Это не может быть.

Также, если это ЕДИНСТВЕННЫЙ тег, который вы планируете извлечь, вы можете использовать регулярное выражение. Однако, если вы хотите извлечь определенные теги из html / xhtml / xml и т. Д., Вам следует рассмотреть возможность использования одного из бесчисленных модулей, написанных для этой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...