我想用$
替換類[A-Za-z0-9_]
之前的所有空白。替代正則表達式
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/;
它只是一個時間匹配,並且產生:
STRING $sDir = sDrive;
我想用$
替換類[A-Za-z0-9_]
之前的所有空白。替代正則表達式
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/;
它只是一個時間匹配,並且產生:
STRING $sDir = sDrive;
可以使用g
標誌的正則表達式:
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/g;
這樣s///
將適用於您的模式的每一場比賽。
默認的Perl行爲是執行替換一次。
g
標誌告訴它執行每次出現的替換。
要匹配多次,使用/ g標誌:
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/g;
如果我認爲你的意思你的意思是:
s/\s+\b/ \$/g;
之前(這樣' a'
- >' $a'
)這將刪除所有的空格和\ b爲要麼(?=(?<=\W)\w)
或(?=(<=\w)\W_
的斷言; \ s總是\W
和[a-zA-Z0-9_]
匹配\w
的通用定義,所以它匹配您的(?=[...])
。
(當然,如果你正在處理的字符集,其中\w
是不一樣的[a-zA-Z0-9]
,你必須替換爲\b
的斷言。)
可以使用\'的替代w' '[A-ZA-Z0-9_]'。 – 2010-08-24 14:40:51
@eugene不,你不能使用'\ w'作爲'[A-Za-z0-9_]'的同義詞。如果你的意思是'\ w',那麼使用'\ w'。如果你的意思是'[A-Za-z0-9_]',那麼使用'[A-Za-z0-9_]'。 – 2010-08-24 14:46:23
雖然,如果你知道你正在處理ascii,你可以。 – muhmuhten 2010-08-24 14:47:42