我想问一下是否可以在带有“e”修饰符的替换匹配表达式的 RHS 中放置另一个正则表达式。
例如,我想用 替换 $foo 中存储的任何单词。相同数量的“-” , 不区分大小写。
例如:
$str =~ s/($foo)/$temp = $1; $temp ~= s/./-//gie;
但是编译的时候经常会出现语法错误,而
$str =~ s/($foo)/$temp = $1; $temp = "---"/gie;
确实有效。
我想我没有正确逃脱斜线,有什么想法吗?
最佳答案
您当然需要 e
可以使用的修饰符
$str = 'banana';
$foo = 'na';
$str =~ s/$foo/$&=~s#.#-#gr/ge;
print $str;
见 online Perl demo
请注意,外部正则表达式使用
/
正则表达式分隔符,而内部的分隔符包含不同的分隔符(您可以在此处使用您最喜欢的两个)。e
修饰符是外层模式必须的,你还需要通过 r
修改器到内部,以避免修改只读值问题。另请注意,在 Perl v.5.20 之前,最好避免使用
$&
并用 (...)
将整个图案括起来捕获组:$str =~ s/($foo)/$1=~s#.#-#gr/ge;
^ ^ ^^
关于regex - 正则表达式中的 Perl 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40248541/