我正在尝试构建一个匹配字符串的Perl正则表达式:
no tags
beginning<tag>this is tag</tag>rest of line
<tag1>this is tag1</tag1>
<tag1>this is tag1</tag1>rest of line
我想使用分组来提取标签以及它们之间的内容。
我试着用这个:
$a="beginning<tag>this is tag</tag>rest of line";
print "a=$a\n\n";
($x0, $x1, $x2, $x3, $x4, $x5) = ($a =~ /(.*?)(<tag>)(.*)(<\/tag>)(.*)/);
print "x0=$x0\n";
print "x1=$x1\n";
print "x2=$x2\n";
print "x3=$x3\n";
print "x4=$x4\n";
a=beginning<tag>this is tag</tag>rest of line
x0=beginning
x1=<tag>
x2=this is tag
x3=</tag>
x4=rest of line
我想要的是什么,但如果这是源字符串:
a=there are no tags
x0=
x1=
x2=
x3=
x4=
没有什么比赛。
答案 0 :(得分:2)
这就是你要找的东西(见online demo):
(?m)(.*?)(?:$|(<[^>]*>)([^<]*)(</[^>]*>)(.*))
这是如何运作的?
(?m)
多行修饰符可确保$
可以匹配每行的结尾,因为您似乎在文件中工作。(.*?)
之后是一个替换:该行的$
末端,允许您在没有标记时捕获该字符串; |
或您的标记和可选尾部。