我尝试能够在 perl 的一个正则表达式中提取 2 种形式的 html 元素名称,例如我有这个:
文件.all。元素名称。
并且
document.all[" ElemName "]。
还有这个
document.all[' ElemName ']。
而且我需要获取ElemName,我只能捕获一个选项,是否可以在 1 个正则表达式中提取它?这就是我所拥有的:
document.all[\.\w|\[](\w+)
仅捕获第一个示例
您可以使用命名捕获,自 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";
}
您可以使用包含单引号和双引号的字符类来匹配引号:
$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