使用Perl正则表达式保持TRUE非贪婪匹配

时间:2013-08-12 22:51:21

标签: regex perl negative-lookahead non-greedy

从下面的单词“tacacatac”,我想匹配“猫”。似乎正则表达式c。*?t应该给我这个,但我想它从第一次出现“c”开始然后从那里找到下一个“t”,因此匹配“cacat”。

有没有办法(可能使用负向前瞻)从最后一个t之前的c开始寻找?

- - - - - - - - 编辑 如果你用字符串替换字母

,我需要一个可行的选项

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用否定字符类:

c[^ct]*t

这将匹配除ct之间的任何字符。

答案 1 :(得分:0)

试试这个:

my $str = "the cat in the cat in the hat";
if ($str =~ /(cat(?:(?!cat).)*hat)/) {
    print $1, "\n";
}