gpt4 book ai didi

regex - Perl 正则表达式将 {a, b, c, ..., x} 转换为 (a|b|c|...|x)

转载 作者:行者123 更新时间:2023-12-04 20:06:30 25 4
gpt4 key购买 nike

我正在学习 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com