regex - 如何在替换中使用变量作为修饰符

标签 regex perl variables substitution modifier

有没有办法在替换中使用变量作为修饰符?

my $search = 'looking';
my $replace = '"find: $1 ="';
my $modifier = 'ee';

s/$search/$replace/$modifier;

我需要使用哈希数组来使用不同的修饰符进行批量搜索替换。

最佳答案

而使用eval的方法编译一个新的替换可能是最直接的,你可以创建一个更模块化的替换:

use warnings;
use strict;

sub subst {
    my ($search, $replace, $mod) = @_;

    if (my $eval = $mod =~ s/e//g) {
        $replace = qq{'$replace'};
        $replace = "eval($replace)" for 1 .. $eval;
    } else {
        $replace = qq{"$replace"};
    }
    sub {s/(?$mod)$search/$replace/ee}
}

my $sub = subst '(abc)', 'uc $1', 'ise';

local $_ = "my Abc string";

$sub->();

print "$_\n";  # prints "my ABC string"

这只是经过轻微测试,留作练习供读者实现其他标志,如 g

关于regex - 如何在替换中使用变量作为修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238348/

相关文章:

regex - 使用sed替换仅用引号引起来的文本

c# - 大于 0 且小于 11 的整数的正则表达式

html - Perl XPath到表单输入字段的值

php - 基于php变量号最后一位的if语句

python - 如何在 python 中拆分运算符和操作数

python - 在Python中从字符串中选择文本的正则表达式

perl - 如何获取仅用于文件上传的 CGI.pm 字段列表?

perl - 将参数传递给 Perl 子例程时,是否会影响数据复制性能?

mysql - 在 MySQL 的 LIMIT 子句中使用变量

variables - 带有 knockout 功能的链接中的可变文本