Regex 为什么';第一次更换有什么效果吗?

Regex 为什么';第一次更换有什么效果吗?,regex,perl,Regex,Perl,很可能我在这里遗漏了一些明显的东西,但是为什么我需要调用search/replace正则表达式两次才能在下面的代码中产生任何效果呢?如果我只调用一次,则不会进行替换:-( 如果amp没有正确地转换为&,我将在第2步返回一个HTML页面(可能是错误页面)而不是Javascript Update:原来URL是双重编码的。谢谢大家的帮助! < P>我怀疑如果你查看输入数据,它做的是正确的事情。我猜是在编码和解码的中间,你看不到真正的输入和输出。 use strict; use warnings; m

很可能我在这里遗漏了一些明显的东西,但是为什么我需要调用search/replace正则表达式两次才能在下面的代码中产生任何效果呢?如果我只调用一次,则不会进行替换:-(

如果amp没有正确地转换为&,我将在第2步返回一个HTML页面(可能是错误页面)而不是Javascript


Update:原来URL是双重编码的。谢谢大家的帮助!

< P>我怀疑如果你查看输入数据,它做的是正确的事情。我猜是在编码和解码的中间,你看不到真正的输入和输出。
use strict;
use warnings;

my $youtubeScr = "a&amp;b";

$youtubeScr =~ s/&amp;/&/g;
print $youtubeScr;
print "\n";

$youtubeScr =~ s/&amp;/&/g;
print $youtubeScr;
print "\n";
这张照片

a&b
a&b
换句话说,它一开始就已经奏效了

您确定您的原始文本不是
foo&;bar
?这将提供

foo&amp;bar
foo&bar
使用上述代码


PS My perl fu糟透了。对于上面代码中的任何语言滥用,我深表歉意,但我认为这仍然应该是有帮助的:)

不要尝试使用正则表达式来解析HTML。您使用的参数是什么?是的,我知道我不应该使用正则表达式来解析HTML,但这只是一个快速而肮脏的解决方案;-)如果使用正确的工具,速度可能会更快。解析HTML是一个已解决的问题。使用图书馆。也许它甚至提供了一种解析实体的方法,比如,看这里:我同意这可能和HTML实体的双重编码有关。因为没有直接的原因说明为什么会发生这种情况。我已经验证过了,这不是双重编码的问题。目前我唯一的猜测是,我从捕获中获取字符串(即$1)这一事实是问题所在-但我不确定如何或为什么…好吧,试着在第一次替换之前、两次替换之间和第二次替换之后写出值-并发布该信息。发布前后的差异,只有一个
s/&/&/g
a&b
a&b
foo&amp;bar
foo&bar