為什么下面幾行代碼沒有從我的變數中洗掉非ascii字符,而是用一個空格代替?
$text =~ s/[[:^ascii:]] /rg。
$text =~ s/h /g;
這在哪里可以去除換行?
$log_mess =~ s/[
] //g。
uj5u.com熱心網友回復:
為將來發現這個問題的人解釋一下這個問題:
$text =~ s/[[:^ascii:]] /rg;
問題在于替換運算子(s/.../.../)上的/r選項。
這個運算子在perlop的"Regexp Quote-Like Operators "部分有記錄。它是這樣描述/r的:
r - 回傳替換,并保留原始字串不動。
你看,在大多數情況下,替換運算子對它所給的字串起作用(例如,你的變數$text),但在某些情況下,你不希望這樣。在某些情況下,你希望原始變數保持不變,并回傳經過改變的字串,以便你可以將其存盤在一個新的變數中。
以前,你會這樣做:
my $new_var = $var;
$new_var =~ s/regex/substitution/;
但是由于添加了/r選項,你可以將其簡化為:
my $new_var = $var =~ s/regex/substitution/r;
我不確定你為什么在你的代碼中使用/r(我猜你是從別的地方復制過來的),但你在這里不需要它,正是它導致你的原始字串沒有變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311362.html
標籤:
