Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从嵌套的html标记中提取值的Perl正则表达式_Html_Regex_Perl - Fatal编程技术网

从嵌套的html标记中提取值的Perl正则表达式

从嵌套的html标记中提取值的Perl正则表达式,html,regex,perl,Html,Regex,Perl,请试试这个: (一) (二) 3) ) (四) 输出: unixshell 惠普 一般的 [1] 试试这个: <h1><b><i>Google</i></b></h1> 试试这个: <h1><b><i>Google</i></b></h1> 对于这个您可以使用的简单案例:需求不再简单,请查看@amon关于如何使用HTML解析器的答案 /<a.*

请试试这个:

(一)

(二)

3) )

(四)

输出:

unixshell

惠普

一般的

[1] 试试这个:

<h1><b><i>Google</i></b></h1>
试试这个:

<h1><b><i>Google</i></b></h1>
对于这个您可以使用的简单案例:需求不再简单,请查看@amon关于如何使用HTML解析器的答案

/<a.*?>([^<]+)</

对于这个您可以使用的简单案例:需求不再简单,请查看@amon关于如何使用HTML解析器的答案

/<a.*?>([^<]+)</


如注释中所述,不要使用正则表达式。我特别喜欢,它允许我使用CSS选择器:

echo '<td><a href="/wiki/Unix_shell" title="Unix shell">Unix shell</a>
<a href="http://www.hp.com"><h1><b>HP</b></h1></a>
<a href="/wiki/Generic_programming" title="Generic programming">generic</a></td>);' | perl -ne '/<a.*?>([^<]+)</; print "$1\n"'
Unix shell
HP
generic

如注释中所述,不要使用正则表达式。我特别喜欢,它允许我使用CSS选择器:

echo '<td><a href="/wiki/Unix_shell" title="Unix shell">Unix shell</a>
<a href="http://www.hp.com"><h1><b>HP</b></h1></a>
<a href="/wiki/Generic_programming" title="Generic programming">generic</a></td>);' | perl -ne '/<a.*?>([^<]+)</; print "$1\n"'
Unix shell
HP
generic

我提出了这个正则表达式,它适用于PCRE下的所有采样输入。这个正则表达式等价于具有尾部递归模式(?1)的正则语法*

(?)((?:\w+(:\s*)(?:\1)*


只需获取返回数组的第一个元素,即array[0]

我提出了这个正则表达式,它适用于PCRE下的所有采样输入。这个正则表达式等价于具有尾部递归模式(?1)的正则语法*

(?)((?:\w+(:\s*)(?:\1)*



只需获取返回数组的第一个元素,即数组[0]

不要使用正则表达式解析HTML。这是个坏主意™.你的表达是“把所有的东西都拿走,直到结束”,这就是你得到的。您需要使用
Perl有许多优秀的HTML解析器(例如)。不要使用正则表达式。我知道如何提取值,几乎可以工作,在排除结束标记时失败,知道吗?不要使用正则表达式解析HTML。这是个坏主意™.你的表达是“把所有的东西都拿走,直到结束”,这就是你得到的。您需要使用
Perl有许多优秀的HTML解析器(例如)。不要使用正则表达式。虽然我知道用于提取值,几乎可以工作,但在排除结束标记时失败,有什么想法吗?Floris,它可以有一个或多个嵌套:@user1239790-我已经给出了第二个表达式来处理“任何嵌套”。尝试了以下操作:不起作用:if($match=~([^>]*?)/{$title=$1;}else{$title=”“;}你用的表达方式和我说的不一样。当你使用我的第二个表达式时,你得到了什么结果?我试过了,很好。正在工作。。。只需要删除***下的html标记(如果有)并获取值。Floris,它可能有一个或多个嵌套:@user1239790-我已经给出了第二个表达式来处理“任何嵌套”。尝试以下操作:无效:if($match=~/([^>]*?)/){$title=$1;}否则{$title=“;}您使用的表达式不是我给出的表达式。当你使用我的第二个表达式时,你得到了什么结果?我试过了,很好。正在工作。。。只需要删除***下的html标记(如果有)并获取值。@user1239790您开始明白为什么不应该使用正则表达式了吗?您的表达式不应该是
/([^>]+)是的,我看到了,正则表达式与标记有关,我们不能为上面的问题提供正则表达式解决方案吗?这将在嵌套标记之间获取文本
/(?)([^>@hwnd确实如此-但它(答案中给出的表达式,而不是注释中的表达式)将因多个嵌套标记而失败。@user1239790您开始明白为什么不应该使用正则表达式了吗?您的表达式不应该是
/([^>]+)是的,我看到了,正则表达式与标记有关,我们不能为上面的问题提供正则表达式解决方案吗?这将在嵌套的标记之间抓取文本。
/(?)([^>@hwnd是的-但是它(答案中给出的表达式,而不是注释中的表达式)将因多个嵌套的标记而失败。
use Mojo;

my $dom = Mojo::DOM->new(q(<a href="#google"><h1><b>Google</b></h1></a>));

print $dom->at('a[href="#google"]')->all_text, "\n";
use HTML::TreeBuilder::XPath;

my $dom = HTML::TreeBuilder::XPath->new_from_content(q(<a href="#google"><h1><b>Google</b></h1></a>));

print $dom->findvalue('//a[@href="#google"]'), "\n";