如何解决Parens的奇怪Perl正则表达式行为
| 我正在添加一些Wikipedia标记,并且想要匹配相对链接(在Wikipedia上)中的URL。我不想匹配任何包含冒号的URL(不计算协议冒号),以避免出现特殊页面等,因此我有以下代码:while ($body =~ m|<a href=\"(?<url>/wiki/[^:\"]+)|gis) {
my $url = $+{url};
print \"$url\\n\";
}
不幸的是,此代码无法正常工作。包含括号[即/wiki/Eon_(geology
)]会在开头括号之前被过早截断,因此URL将匹配为/wiki/Eon_
。我一直在看一些代码,但无法弄清楚自己在做什么错。谁能提供一些见识?
解决方法
只要您的Perl足够新以支持这些RE功能,此代码就没有任何错误。用Perl 5.10.1测试。
$body = <<\"__ENDHTML__\";
<a href=\"/wiki/Eon_(geology)\">Body</a> Blah blah
<a href=\"/wiki/Some_other_(parenthesis)\">Body</a>
__ENDHTML__
while ($body =~ m|<a href=\"(?<url>/wiki/[^:\"]+)|gis) {
my $url = $+{url};
print \"$url\\n\";
}
您是否正在使用旧的Perl?
,您没有将RE锚定到字符串的末尾。然后放一个“”。
虽然这是一个问题,但不是他试图解决的问题。他试图解决的问题是RE中没有与方法/主机名(http://en.wiki ...)相匹配的内容。添加。*?在“(??”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。