【发布时间】:2013-05-20 15:58:52
【问题描述】:
我有一个 Perl 脚本,它执行正则表达式来查找标记标签 (<tag>)。
我的正则表达式是:<tag([^>]+)>
这适用于大多数情况,但是,我发现了一个不起作用的实例。
如果<tag> 具有以下格式....
<tag
attr="12345">
正则表达式工作正常。
但是,如果<tag> 看起来像这样。
<tag attr="12345"
>
没有匹配。我已经测试过我的正则表达式是 Notepad++,它适用于所有实例。问题出在我的 Perl 脚本中。
我已经尝试了几个终端锚点,但到目前为止都没有运气。非常感谢任何帮助!
已编辑 这是我的代码行。
$line =~s/<tag([^>]+)>/<!--tag $1-->/g;
【问题讨论】:
-
不确定正则表达式是否是问题所在。我试过了:
$ perl -e 'if (<> . <> =~ /<tag([^>]+)>/) { print "yes\n" }' <tag attr="12345" > yes并且有效。也许你需要展示更多的代码(也许是一个小的 repro 程序)。 -
为我工作:
my $s = qq(<tag attr="12345"\n>); $s =~ /<tag([^>]+)>/ and print $1;提供attr="12345"。 -
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php。
-
我的错误:这是 Perl 版本:htmlparsing.com/perl
-
如果它看起来像 XML 或 HTML,请尝试使用已建立的模块之一。有一些 HTML 解析器可用于从文本中解析出标签,即使它们不是 HTML 标签但看起来很像。
标签: regex perl html-parsing