匹配不同类型的单词-regexp

时间:2015-02-27 13:31:31

标签: regex perl

我必须有一个与以下行匹配的正则表达式:

ESR/EXR
ESR [1]
(ESR) [1]
(ESR) [1] 
RARB [1]
 ESR [1] # Space before word

但不匹配:

ESR
(ESR)

我已经尝试了(\w+)[?\s\/]\[\w+\]?\s^?\((\w+)?\)[?\s\/]\[\w+\]?\s,但我无法找到一种方法来匹配所有情况与一个正则表达式。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我不确定我是否真的了解您的需求,但如何:

use Modern::Perl;

my $re = qr~\(?\w+\)?(?:[ /].+)~;
while(<DATA>) {
    chomp;
    say /$re/ ? "OK : $_" : "KO : $_";
}

__DATA__
ESR/EXR
ESR [1]
(ESR) [1]
(ESR) [1] 
RARB [1]
ESR
(ESR)

<强>输出:

OK : ESR/EXR
OK : ESR [1]
OK : (ESR) [1]
OK : (ESR) [1] 
OK : RARB [1]
KO : ESR
KO : (ESR)