Perl行尾正则表达式

时间:2013-05-20 15:58:53

标签: regex perl html-parsing

我有一个执行正则表达式的Perl脚本来查找标记标记(<tag>)。

我的正则表达式是:<tag([^>]+)>

这适用于大多数情况,但是,我发现了一个不起作用的实例。

如果<tag>有以下形式......

<tag 
attr="12345">

正则表达式正常。

但是,如果<tag>看起来像这样。

<tag attr="12345"
>

不匹配。我已经测试了我的正则表达式是Notepad ++,它适用于所有实例。问题出在我的Perl脚本中。

我尝试了几种终端锚,但到目前为止还没有运气。非常感谢任何帮助!

编辑 这是我的代码行。

$line =~s/<tag([^>]+)>/<!--tag $1-->/g;

1 个答案:

答案 0 :(得分:0)

您调用字符串来操纵$line。这是可疑的,因为你之前必须连接多行,以检查多行标签。 请检查(或发布)您连接代码。我90%肯定问题就在那里。

你还有另外一个问题,你不一定知道。 如果同一行上有多个标签,那么正则表达式将替换第一个和最后一个之间的文本。

<tag foo="1">foo bar <tag bar="2">baz spam

将成为

<!--tag foo="1">foo bar <tag bar="2"-->baz spam
治疗后,虽然你可能想要

<!-- tag foo="1"-->foo bar <!--tag bar="2"-->baz spam

请使用+量词的惰性版本:+?

$line = ~s/<tag([^>]+?)>/<!--tag $1-->/g;