正则表达式展望未来/展望未来

时间:2014-03-28 15:33:22

标签: regex lookahead lookbehind

我一直在思考这个问题很长一段时间,但仍然无法弄明白。正则表达式向前/向后看。无论如何,我不确定在我的情况下使用哪个,我仍然无法理解这个概念。我举个例子。

我有一个名字.... My Business,LLC(密尔沃基,威斯康星州)_12345678_12345678

我想要做的是,如果名称中有逗号,无论有多少,请将其删除。同时,如果名称中没有逗号,仍然读取该行。我所拥有的单线程列表如下。

s/(.*?)(_)(\d+_)(\d+$)/$1$2$3$4/gi;

我想从$ 1(My Business,LLC(密尔沃基,威斯康星州))删除任何逗号。我可以将正则表达式中的逗号称为文字字符串((。?),(。?),(。*?)(_。*?$))如果每次都是这种确切的情况但事实并非如此。

我希望它省略逗号并匹配“我的商家,LLC_12345678_12345678”或“我的商家_12345678_12345678”,即使没有逗号。 在任何情况下,我希望它匹配行,逗号与否,并删除任何逗号(如果有),无论多少或在哪里。

如果有人能帮助我理解这个概念,那将是一个突破!!

1 个答案:

答案 0 :(得分:0)

使用Perl的/e修饰符,以便您可以在s///

中替换期间传递函数
$str = 'My Business,LLC (Milwaukee,WI)_12345678_12345678';
## modified your regex as well using lookahead
$str =~ s/(.*?)(?=_\d+_\d+$)/funct($1)/ge;
print $str;

sub funct{
    my $val = shift;
    ## replacing , with empty, use anything what you want!
    $val =~ s/,//g;
    return $val;
}

使用funct($1)代替您基本上调用带参数$1

的funct()函数