我一直在做一些搜索,並沒有找到答案。爲什麼這不起作用?使用變量作爲正則表達式替換參數
$self->{W_CONTENT} =~ /$regex/;
print $1; #is there a value? YES
$store{URL} =~ s/$param/$1/;
是$ 1有一個值。 $ param被替換,但它被替換爲無。我看好$ 1有價值。如果我用文本替換而不是「$ 1」,它可以正常工作。請幫忙!
我一直在做一些搜索,並沒有找到答案。爲什麼這不起作用?使用變量作爲正則表達式替換參數
$self->{W_CONTENT} =~ /$regex/;
print $1; #is there a value? YES
$store{URL} =~ s/$param/$1/;
是$ 1有一個值。 $ param被替換,但它被替換爲無。我看好$ 1有價值。如果我用文本替換而不是「$ 1」,它可以正常工作。請幫忙!
對於$1
有一個值,你需要確保$param
有括號()
在裏面。即下面的問題與你正在解釋的問題類似。
my $fred = "Fred";
$fred =~ s/red/$1/;
# $fred will now be "F"
但這部作品
my $fred = "Fred";
$fred =~ s/r(ed)/$1/;
# $fred will now be "Fed"
現在,如果你想使用$1
從你的第一個正則表達式中,你需要複製它的第二個。每個正則表達式評估重置$1
... $&
。所以你想要這樣的東西:
$self->{W_CONTENT} =~ /$regex/;
print $1; #is there a value? YES
my $old1 = $1;
$store{URL} =~ s/$param/$old1/;
反向引用(如$ 1)不應在表達式中使用;你會用一個不同的符號 - 進行概述,查看Perl Regular Expressions Quickstart。
考慮獲取$ 1的值並將其存儲在另一個變量中,然後在正則表達式中使用該值。
謝謝克里斯託弗! – Mike
謝謝!這很好。我正在玩括號,但我認爲1美元沒有被重置。整蠱! – Mike
如果有任何'$ param'將包含元字符的機會,你可以考慮'/ \ Q $ param \ E/$ old1 /'。 – TLP