0

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

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

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

如果<tag>有以下阵型......

<tag 
attr="12345">

正则表达式工作正常。

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

<tag attr="12345"
>

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

我已经尝试了几个终端锚,但到目前为止没有运气。任何帮助深表感谢!

编辑这里是我的代码行。

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

1 回答 1

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;
于 2013-08-13T09:33:31.567 回答