Regex 替换正则表达式

Regex 替换正则表达式,regex,perl,Regex,Perl,我想用$替换类[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; 要多次匹配,请使用/g标志: $string = "

我想用
$
替换类
[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;

要多次匹配,请使用/g标志:

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

您可以对正则表达式使用
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//
将为模式的每个匹配操作

默认的Perl行为是执行一次替换


g
标志告诉它对每个事件执行替换

如果我认为你的意思是:

s/\s+\b/ \$/g;

这将删除前面的所有空格(因此
'a'
->
'$a'
),并且\b是
(?=(?的断言,如果我认为您的意思是:

s/\s+\b/ \$/g;

这将删除前面的所有空格(因此
'a'
->
'$a'
),并且\b是
(?=(?您可以使用
\w
而不是
[a-Za-z0-9]
@eugene否,您不能将
\w
用作
[a-Za-z0-9]的同义词)
。如果您的意思是
\w
及其所有含义,那么请使用
\w
。如果您的意思是
[A-Za-z0-9\]
,那么请使用
[A-Za-z0-9\]
。但是,如果您知道您在处理ascii,您可以。@sreservor“说您的意思,说您的意思”。你可以使用
\w
而不是
[A-Za-z0-9'
@eugene No,你不能使用
\w
作为
[A-Za-z0-9'
的同义词。如果你的意思是
\w
及其所有含义,那么就使用
\w
。如果你的意思是
[A-Za-z0-9_]
,然后使用
[A-Za-z0-9_]
。但是,如果您知道您在处理ascii,您可以。@sreservor“说您的意思,说您的意思”。将其限定为告诉perl您正在处理ascii!虽然很难确定,但可以。这也将用“空格”替换制表符、换行符和其他空格,因此请小心。或者用
s/(\s)(?=[a-Za-z0-9))/1\$/g
替换正则表达式。您也可以尝试
s/(?这也会用“空格”替换制表符、换行符和其他空格,所以要小心。或者用
s/(\s)(?=[a-Za-z0-9])/$1\$/g
。也可以尝试
s/(?)?