E.g:如何轉義字符串中的所有特殊字符(以及單引號和雙引號)?
$myVar="this#@#!~`%^&*()[]}{;'".,<>?/\";
我無法導出此變量,並使用它,因爲它是在我的計劃。
任何人都可以幫忙嗎?
E.g:如何轉義字符串中的所有特殊字符(以及單引號和雙引號)?
$myVar="this#@#!~`%^&*()[]}{;'".,<>?/\";
我無法導出此變量,並使用它,因爲它是在我的計劃。
任何人都可以幫忙嗎?
my $myVar=q("this#@#!~`%^&*()[]}{;'".,<>?/\");
$myVar = quotemeta($myVar);
print $myVar;
或者使用正則表達式替換逃避所有的字符
my $myVar=q("this#@#!~`%^&*()[]}{;'".,<>?/\");
$myVar =~s/(\W)/\\$1/g;
print $myVar;
$ var = q($ var); $ var = quotemeta($ var);在這裏它也在$ var中轉義$,所以它不能替換$ var的值? –
@PradnyaDeshmukh改爲使用'qq($ var);' – mkHun
Worked quotemeta()for me –
這是什麼quotemeta是爲了,如果我明白你的任務。來自鏈接的文檔
返回EXPR的值,所有非「字」字符都是反斜槓。 (也就是說,不論區域設置如何,所有不匹配
/[A-Za-z_0-9]/
的字符都將在返回的字符串中加上反斜槓。)這是在雙引號字符串中實現\Q
轉義的內部函數。
它的使用非常簡單
my $myVar = q(this#@#!~`%^&*()[]}{;'".,<>?/\\);
print "$myVar\n";
my $quoted_var = quotemeta $myVar;
print "$quoted_var\n";
請注意,我們必須手動逃脫的最後一個反斜槓,以防止它逃跑的結束分隔符。或者你可以在最後加上一個額外的空間,然後去掉它(由chop)。
my $myVar = q(this#@#!~`%^&*()[]}{;'".,<>?/\);
chop $myVar;
現在變換$myVar
像上面,使用quotemeta
。
我把外部的一對"
僅僅表示你想要的變量。但是,如果它們實際上是在變量中,那麼只需將其全部放入q()
,因爲最後一個字符是"
。唯一的問題是緊接在結束分隔符之前的反斜線。
如果你需要在正則表達式中使用這個,那麼你使用\Q
開始,\E
結束轉義。
\ Q之間有什麼和\ E被視爲正常的字符,而不是正則表達式的字符。例如,
'.' =~ /./; # match
'a' =~ /./; # match
'.' =~ /\Q.\E/; # match
'a' =~ /\Q.\E/; # no match
它不會停止插值變量。
$search = '.';
'.' =~ /$search/; # match
'a' =~ /$search/; # match
'.' =~ /\Q$search\E/; # match
'a' =~ /\Q$search\E/; # no match
'\ Q \ê '檢查這些轉義修飾符 – ssr1012