3

我正在尝试编写一个通过 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";
}
4

3 回答 3

8
if ($s =~ /[DE]P/) {
    print "D or E is followed by P";
}
else {
    print "neither D nor E is followed by P";
}
于 2012-09-27T09:20:31.970 回答
0

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

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

此外,我想说的是,在您的字符串中,您EP的位置为 9。因此,它将评估true.

于 2012-09-27T09:19:47.383 回答
0

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

于 2016-06-29T13:49:58.087 回答