尝试将[[http://someUrl.com][link]]
替换为<a href="http://someUrl.com">link</a>
正则表达式匹配正确,我可以正确看到$ 1,$ 2,$ 3设置。
$1:[[http://someUrl.com][link]]
$2:http://someUrl.com
$3:link
foreach my $pText("line1 [[http://google.com][google]] end","line2 [[http://someUrl.com][link]] end"){
my $pTemp = $pText;
print "\n".$pTemp."\n";
if ($pTemp =~ /(\[\[((?:http|https|ftp|file|gopher|irc|news|mailto|nntp|telnet)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(?::[a-zA-Z0-9]*)?\/?[a-zA-Z0-9\-\._\?\,\'\/\\\+&%\$#\=~]*)\]\[(.*?)\]\])/){
print "MATCHED : $1 >> $2 >> $3\n";
#$pTemp =~ s/$1/<a href="$2">$3<\/a\>/;
$pTemp =~ s/$1/NEED TO REPLACE/;
print "MODIFIED : $pTemp\n\n";
}
}
奇怪的是它会导致
line1 [[http://google.com][google]] end
MATCHED : [[http://google.com][google]] >> http://google.com >> google
MODIFIED : line1 [[http://google.com][googNEED TO REPLACE] end
line2 [[http://someUrl.com][link]] end
MATCHED : [[http://someUrl.com][link]] >> http://someUrl.com >> link
MODIFIED : line2 [[http://someUrl.com][link]] end
即使正则表达式正确匹配字符串,我也不确定为什么替换失败。 任何指针都会有很大的帮助。
答案 0 :(得分:1)
s//
的第一个参数被解释为正则表达式,因此匹配中的“[”和“]”字符会搞砸。您可以使用'\ Q'来逃避它们:
$pTemp =~ s/\Q$1/NEED TO REPLACE/;