2014-12-05 76 views
1

应该很容易,但这个正则表达式是不工作(的Perl):我怎样才能得到这个正则表达式的工作?

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

比赛

A - B - C(我想$ 1 =,$ 2 = B,$ 3 = C)
A - b(我想$ 1 = A,$ 2 = b)

比赛

ABC

任何想法表示欢迎!
你可以在这里尝试一下:
https://regex101.com/r/kP0fN9/2

+0

你能至少状态,你想要什么? – 2014-12-05 10:36:34

+0

你试过了:'/^[^ - ] +( - [^ - ] +)* $ /' – anubhava 2014-12-05 14:30:00

+0

是的。不工作。 – user77115 2014-12-05 15:30:11

回答

2

好像你想是这样的,

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

OR

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

DEMO

更新:

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

DEMO

+0

如果输入包含多行,则在字符类中添加'\ n'字符。 – 2014-12-05 10:36:36

+0

感谢您的回复。 我已经更新了我的问题以澄清,当您提供此答复时尚不清楚。 – user77115 2014-12-05 15:31:15

+0

@ user77115你是否想要匹配'abc'? – 2014-12-05 15:35:11

1

如何:

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

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


__DATA__ 
a - b - c 
a - b 

输出:

("a ", " b ", " c") 
("a ", " b") 
相关问题