在perl中正则表达式中的OR条件

时间:2012-09-27 09:16:20

标签: regex perl if-statement

我正在尝试编写一个脚本,它通过Perl中的正则表达式执行OR函数。我编写了一个代码,如果字符串包含'D'或'E'后跟'P',它应该打印“D或E后跟P”,否则“D或E后面跟着P”。假设我给$ s ='ABCDEABCDEPABCDEAB'它应该打印else条件,但我认为我的if语句不能正常工作。请帮忙。

my $s = 'ABCDEABCDEPABCDEAB';
if ($s =~ /D|E(?=P)/) {
    print "D or E is followed by P";
} 
else {
    print "D or E is not followed by P";
}

3 个答案:

答案 0 :(得分:7)

if ($s =~ /[DE]P/) {
    print "D or E is followed by P";
}
else {
    print "neither D nor E is followed by P";
}

答案 1 :(得分:0)

我认为你的问题与括号有关,试试这个:

$s =~ m/(D|E)(?=P)/

此外,我想说在你的字符串中,你在{9}位置EP。因此,它会评估true

答案 2 :(得分:0)

使用Damian Conway的Regexp::Debugger并尝试'rxrx'功能。它将引导您完成正则表达式匹配中的每个字符比较,以便您可以确切地看到与什么时间匹配的内容。很有用。它也可以在Windows下的DOS下运行(没有漂亮的颜色),如果这是你运行的perl。