我怎样才能使这个正则表达式工作?

时间:2014-12-05 10:32:51

标签: regex perl

应该很简单,但这个正则表达式不起作用(Perl):

^(.*?)-(.*?)(-(.*)|$)

匹配

a - b - c(我希望$ 1 = a,$ 2 = b,$ 3 = c)
a - b(我希望$ 1 = a,$ 2 = b)

!匹配

ABC

欢迎任何想法 你可以在这里试试:
https://regex101.com/r/kP0fN9/2

2 个答案:

答案 0 :(得分:2)

好像你想要这样的东西,

^[^-]*-(?:[^-]*-)?[^-]*$

OR

^[^-\n]*-(?:[^-\n]*-)?[^-\n]*$

DEMO

更新

^(.*?)\s*-\s*(.*?)\s*(?:-\s*(.*)|$)

DEMO

答案 1 :(得分:1)

怎么样:

use strict;
use warnings;
use Data::Dump qw(dump);

while(<DATA>) {
    chomp;
    my @res = $_ =~ /([^-]+)/g;
    dump@res;
}


__DATA__
a - b - c
a - b

<强>输出:

("a ", " b ", " c")
("a ", " b")