我想问一下是否可以在替换匹配表达式的RHS中使用“e”修饰符放入另一个正则表达式.
例如,我想用相同数量的“ – ”替换$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;
请注意,外部正则表达式使用/ regex分隔符,而内部正则表达式包含不同的分隔符(您可以在此处使用您最喜欢的两个).
e修饰符对外部模式是强制性的,您还需要将r修饰符传递给内部修饰符以避免修改只读值问题.
另请注意,在Perl v.5.20之前,你最好避免使用$&并用(…)捕获组包围整个模式:
$str =~ s/($foo)/$1=~s#.#-#gr/ge; ^ ^ ^^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。