2012-03-23 70 views
1

如果我有像这样如何替换两个锚点之间的字符?

my $s = 'src="/api/385/=VIGTIG%20UPDATE%20!.jpg?size=webview" /></span>'; 

字符串我如何再与_/api/385/和第一>之间替换所有%20

+0

哪里字符串来自?使用DOM解析器有意义吗? – Tomalak 2012-03-23 14:27:20

+0

这是已转换为维基模型的html,所以在这一点上它不是有效的html。 – 2012-03-23 14:30:00

回答

3

一种方法是这样写:

$s =~ s{(/api/385/[^>]*>)}{my $tmp = $1; $tmp =~ s/%20/_/g; $tmp}e; 

这与_里面更换%20的结果替换(/api/385/[^>]*>)。 (该e标志在s///指“替换-东西是一个表达,而不是一个字符串文字”。)

+0

'[^>] *'是什么意思? – 2012-03-23 14:46:14

+1

括号记法'[[]]'创建一个“字符类”。通常这意味着“括号内的任何字符” - 例如'[aeiou]'意味着“任何字符'a','e','i','o'或'u'',和'[1-5M-Q]'表示“1”和“5”之间的任何ASCII数字或者“M”和“Q”之间的ASCII大写字母 - 但是当字符类中的第一个字符是'^' ',这意味着相反;所以'[^>]'表示“任何不是*'>'”的字符。星号'*'的意思是“我刚刚说过的零或多个(并且多于零)”,因此'[^>] *'表示“零个或多个不是'>'的字符。 – ruakh 2012-03-23 14:57:22

4

这会做你想要

$s =~ s|(/=[^>]+)| (my $ss = $1) =~ s/%20/_/g; $ss |e; 

但你知道,%20是十六进制的空间呢?

相关问题