2012-03-23 7 views
1

私はそう2つのアンカーの間で文字を置き換える方法は?

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

のような文字列を持っている場合はどのようにして、その後/api/385/と最初>の間にある_ですべて%20を置き換えますか?

+0

どこ文字列から来たのでしょうか? DOMパーサーを使用するのは理にかなっていますか? – Tomalak

+0

これはwiki mockupに変換されたhtmlですので、この時点では有効なhtmlではありません。 –

答えて

3

一つの方法は、書くことである。その中_%20を交換する結果と(/api/385/[^>]*>)を置き換え

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

。 (s///eフラグが「交換-ものが表現、リテラルではありません文字列である」という意味。)

+0

'[^>] *'はどういう意味ですか? –

+1

ブラケット表記 '[...]'は、「文字クラス」を作成します。通常、「括弧内の文字」は、「aeiou」は「a」「e」「i」「o」「u」のいずれかの文字を意味し、 '' 1-5M-Q ''は' '1と5の間の任意のアスキー数字、または' M'と 'Q'のASCII大文字を意味しますが、文字クラスの最初の文字が^ '、それは反対を意味する。 '[^>]'は「*ではない文字」を意味します。アスタリスク '*'は "私が言ったことのゼロ以上(より多くはより良いもの)"を意味するので、 '[^>] *は"> 'ではないゼロ以上の文字を意味します"。 – ruakh

4

これは、あなたが

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

をしたいが、あなたは%20はスペースのための六角であることを知っている何だろうか?

関連する問題