Perl的正则表达式解析第一锚 tag

问题描述 投票:0回答:2

我有下面有两个anchor的标签,输入到我的perl脚本的HTML页面:

<a href="link.html"> TITLE </a> <a href="link.html"> SUB TITLE </a>

我想提取我即仅需要从第一锚标记<a>和第二锚标记<a>文本短信应该被忽略唯一称号。这我只需要使用Perl的正则表达式的事情。

我试过以下的正则表达式,但它不是按预期工作:

<a[^>]*[^>]*>(?!.*a>.*)a>

整个剧本是这样的:

#!/usr/bin/perl

use strict;
use warnings;

my $str = '<a href="link.html"> TITLE </a> <a href="link.html"> SUB TITLE </a>';

my $res = $str =~ m/<a[^>]*[^>]*>(?!.*a>.*)a>/;

print $res;

执行:

 prakash@prak-pc:~$ perl regtest.pl 
 prakash@prak-pc:~$
regex perl parsing
2个回答
2
投票
my $str = '<a href="link.html"> TITLE </a> <a href="link.html"> SUB TITLE </a>';
my ($res) = $str =~ m~<a[^>]*>(.*?)</a>~;
print $res,"\n";

说明:

m~          # match operator, delimiter
    <a      # literally <a
    [^>]*   # 0 or more any character tat is not >
    >       # >
    (.*?)   # group 1, 1 or more any character, not greedy
    </a>    # literally
~           # regex delimiter

您可以使用m~<a[^>]*>\h*(.*?)\h*</a>~如果你不想要匹配的开头和结尾的空格也。


2
投票
/^(?:<a[^>]*>)([^<]*)/

看到regex101 https://regex101.com/r/Po3goc/1演示

  • ^断言在一行非捕获组的开始位置(?:]>)] 量词 - 匹配零和无限的时间之间,多次,尽可能需要回馈(贪婪) 相匹配的字符>字面上(区分大小写)的字符>字面上(区分大小写)第一捕获组([^ <])匹配单个字符在下面的列表中不存在匹配[^ <] 量词 - 匹配零和无限次之间,多次地,用之于根据需要(贪婪)<字符匹配<字面上(区分大小写)
© www.soinside.com 2019 - 2024. All rights reserved.