我想用[A-Za-z0-9_]
替换课程$
之前的所有空格。
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/;
它只匹配一次并产生:
STRING $sDir = sDrive;
答案 0 :(得分:3)
要多次匹配,请使用/ g标志:
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/g;
答案 1 :(得分:2)
您可以使用g
标记作为正则表达式:
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/g;
这样s///
将适用于您的模式的每个匹配。
默认的Perl行为是执行一次替换。
g
标志告诉它执行每次出现的替换。
答案 2 :(得分:0)
如果我认为你的意思是你的意思:
s/\s+\b/ \$/g;
这将删除之前的所有空格(因此' a'
- > ' $a'
)和\ b是(?=(?<=\W)\w)
或(?=(<=\w)\W_
的断言; \ s始终为\W
,[a-zA-Z0-9_]
与\w
的通用定义相匹配,因此它与您的(?=[...])
匹配。
(当然,如果您处理\w
与[a-zA-Z0-9]
不同的字符集,则必须将\b
替换为断言。)< / p>