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 ...)相匹配的内容。添加。*?在“(??”     

要回复问题请先登录注册