替换正则表达式

时间:2010-08-24 14:34:54

标签: regex perl

我想用[A-Za-z0-9_]替换课程$之前的所有空格。

$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/;

它只匹配一次并产生:

STRING $sDir = sDrive;

3 个答案:

答案 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' - &gt; ' $a')和\ b是(?=(?<=\W)\w)(?=(<=\w)\W_的断言; \ s始终为\W[a-zA-Z0-9_]\w的通用定义相匹配,因此它与您的(?=[...])匹配。

(当然,如果您处理\w[a-zA-Z0-9]不同的字符集,则必须将\b替换为断言。)< / p>