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

标签 regex perl expression

我想问一下是否可以在带有“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/

相关文章:

android - 用户输入验证仅包含字母字符

regex - Laravel 模式验证管道字符问题

perl - 有什么方法可以将数据从 Perl 传输到 Unix 命令行实用程序

perl - 如何使用 Perl 脚本发布文件的内容

perl - 如何使 inc::module::install 建议 ubuntu 包?我是不是该?

java - 将字符串对象转换为方程

c++ - Visual Studio 无法显示一些被监视的表达式

python - 名为条件前瞻的正则表达式(Python 中)

regex - 为什么Dart(不)匹配此RegEx?

python - 通过数组中的对象引用特定参数?