我正在尝试编写一个脚本,它通过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";
}
答案 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。