我有一个执行正则表达式的Perl脚本来查找标记标记(<tag>
)。
我的正则表达式是:<tag([^>]+)>
这适用于大多数情况,但是,我发现了一个不起作用的实例。
如果<tag>
有以下形式......
<tag
attr="12345">
正则表达式正常。
但是,如果<tag>
看起来像这样。
<tag attr="12345"
>
不匹配。我已经测试了我的正则表达式是Notepad ++,它适用于所有实例。问题出在我的Perl脚本中。
我尝试了几种终端锚,但到目前为止还没有运气。非常感谢任何帮助!
编辑 这是我的代码行。
$line =~s/<tag([^>]+)>/<!--tag $1-->/g;
答案 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;