我正在学习 Perl 并练习正则表达式,我想拥有以下功能:
输入
通配符样式的 shell 语法
输出
Perl 正则表达式
我很清楚 Regexp::Wildcards 但我想要更小的东西,我也想自己编写它以用于教育目的。
我真的很难为此编写正则表达式。我试图列出我的要求,以帮助使正则表达式模式显现出来:
然而,这只是在我的脑海中引入了更多的问题
例子
假设输入是
{foo, bar}.c
.替代运算符应将其转换为 (foo|bar).c
.
最佳答案
您没有保留反向引用的动态列表。
相反,您将这个问题分解为几个步骤:
my $string = "{a, b, c, d, ..., x}";
if ($string =~ m/\{(.*?)\}/) {
my $str = join '|', split /,\s*/, $1;
print "($str)";
}
输出:
(a|b|c|d|...|x)
也可以使用双层搜索和替换来做到这一点,如下所示:
$string =~ s{\{(.*?)\}}{
my $list = $1;
$list =~ s/,\s*/|/g;
"($list)"
}eg;
print $string;
关于regex - Perl 正则表达式将 {a, b, c, ..., x} 转换为 (a|b|c|...|x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25006111/