Regex Perl行尾正则表达式

Regex Perl行尾正则表达式,regex,perl,html-parsing,Regex,Perl,Html Parsing,我有一个Perl脚本,它执行正则表达式来查找标记() 我的正则表达式是:]+)> 这在大多数情况下都有效,但是,我发现有一个实例它不起作用 如果具有以下结构 <tag attr="12345"> 正则表达式运行良好 但是,如果看起来像这样 <tag attr="12345" > 没有对手。我已经测试了我的正则表达式是Notepad++,它可以很好地用于所有实例。问题出在我的Perl脚本中 我尝试了几次线端锚,但到目前为止运气不好。非常感谢您的帮助 编辑 这是

我有一个Perl脚本,它执行正则表达式来查找标记(

我的正则表达式是:
]+)>

这在大多数情况下都有效,但是,我发现有一个实例它不起作用

如果
具有以下结构

<tag 
attr="12345">

正则表达式运行良好

但是,如果
看起来像这样

<tag attr="12345"
>

没有对手。我已经测试了我的正则表达式是Notepad++,它可以很好地用于所有实例。问题出在我的Perl脚本中

我尝试了几次线端锚,但到目前为止运气不好。非常感谢您的帮助

编辑 这是我的代码行

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

调用字符串来操作
$line
。这是可疑的,因为之前必须连接多行才能检查多行标记。 请检查(或张贴)你连接代码太多。我90%肯定问题就在那里

你还有另一个问题,你不一定意识到。 如果同一行上有多个标记,您的正则表达式也将替换第一行和最后一行之间的文本

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

不确定正则表达式是否是问题所在。我试过:
$perl-e'if(.=~/]+)>/){print“yes\n”}“yes”
,它可以工作。也许你需要显示更多的代码(也许是一个小的复制程序)。适合我:
my$s=qq()$s=~/]+)>/并打印$1
给出
attr=“12345”
。不要使用正则表达式解析HTML。您无法用正则表达式可靠地解析HTML,在这条路上您将面临悲伤和挫折。一旦HTML改变了您的预期,您的代码就会被破坏。有关如何使用已经编写、测试和调试过的PHP模块正确解析HTML的示例,请参阅。有一些HTML解析器可以用来从文本中解析标记,即使它们不是HTML标记,但看起来很像。
<!--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;