正则表达式中的Perl正则表达式

Vit*_*olt 4 regex perl expression

我想问一下是否可以在替换匹配表达式的RHS中使用"e"修饰符放入另一个正则表达式.

例如,我想用相同数量的" - "替换$ foo中存储的任何单词,不区分大小写.

例如:

$str =~ s/($foo)/$temp = $1; $temp ~= s/./-//gie;
Run Code Online (Sandbox Code Playgroud)

但是在编译时它经常会出现语法错误

$str =~ s/($foo)/$temp = $1; $temp = "---"/gie; 
Run Code Online (Sandbox Code Playgroud)

确实有效.

我想我没有正确地逃避斜线,任何想法?

Wik*_*żew 6

你当然需要e修饰符才能使用

$str = 'banana';
$foo = 'na';
$str =~ s/$foo/$&=~s#.#-#gr/ge;
print $str;
Run Code Online (Sandbox Code Playgroud)

请参阅在线Perl演示

请注意,外部正则表达式使用/正则表达式分隔符,而内部正则表达式包含不同的分隔符(您可以在此处使用您最喜欢的两个).

e修正是必须与外部图案,并且还需要通过r修改器内一个以避免只读值的修改问题.

另请注意,在Perl v.5.20之前,您最好避免$&并使用(...)捕获组封装整个模式:

$str =~ s/($foo)/$1=~s#.#-#gr/ge;
          ^    ^ ^^ 
Run Code Online (Sandbox Code Playgroud)