加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:58:41 所属栏目:百科 来源:网络整理
导读:我想问一下是否可以在替换匹配表达式的RHS中使用“e”修饰符放入另一个正则表达式. 例如,我想用相同数量的“ – ”替换$foo中存储的任何单词,不区分大小写. 例如: $str =~ s/($foo)/$temp = $1; $temp ~= s/./-//gie; 但是在编译时它经常会出现语法错误 $st
我想问一下是否可以在替换匹配表达式的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;

见online Perl demo

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

e修饰符对外部模式是强制性的,您还需要将r修饰符传递给内部修饰符以避免修改只读值问题.

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

$str =~ s/($foo)/$1=~s#.#-#gr/ge;
          ^    ^ ^^

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读