使用perl regexp提取html元素名称

时间:2013-01-14 13:39:46

标签: regex perl parsing

我尝试能够在perl中的一个正则表达式中提取2格式的html元素名称 例如我有这个:

  

的document.all。 ElemName

以及

  

的document.all [ “ ElemName ”]。

和这个

  

的document.all [ ' ElemName ']。

我需要获取 ElemName , 我只能捕获一个操作,是否可以在1个正则表达式中提取它? 这就是我所拥有的:

document.all[\.\w|\[](\w+) 

仅捕获第一个示例

3 个答案:

答案 0 :(得分:1)

您可以使用自Perl v5.10以来可用的命名捕获:

#!/usr/bin/env perl
use strict;
use warnings;

my @array = qw{
    document.all.ElemName1.
    document.all["ElemName2"].
    document.all['ElemName3'].
};

for (@array) {
    /
        \b
        document\.all
        (?:
            \.(?<elem>\w+)
            | \["(?<elem>\w+)"\]
            | \['(?<elem>\w+)'\]
        )
        \.
    /x;

    print $+{elem}, "\n";
}

答案 1 :(得分:1)

这将匹配第一个捕获组中ElemName的所有三个案例:

document\.all\.?(?:\[["'])?(\w+)(?:['"]\])?

演示here

答案 2 :(得分:0)

您可以使用包含单引号和双引号的字符类来匹配引号:

$a = 'document.all.Element["ElemNamea"]';
$b = "document.all.Element['ElemNameb']";
print "a : $a\n";
print "b : $b\n\n";

$a =~ /document.all.Element\[['"](\w+)['"]\]/;  # ["'] matches ' or "
print "result: $a and $1\n";                    # result is in $1
$b =~ /document.all.Element\[['"](\w+)['"]\]/;
print "result: $b and $1\n";

输出:

a : document.all.Element["ElemNamea"]
b : document.all.Element['ElemNameb']

result: document.all.Element["ElemNamea"] and ElemNamea
result: document.all.Element['ElemNameb'] and ElemNameb