1

以 aa 或 bb 开头。以它结束(反向引用)。并且中间没有它。

没有“或”和反向引用也没关系——aa.*?(?!aa).*?aa
但它不适用于它们: (aa|bb).*?(?!\1).*?\1

echo preg_match("@(aa|bb).*?(?!\\1).*?\\1@", 'aaxxaaxaa'); // 1 ??
echo preg_match("@(aa|bb).*?(?!\\1).*?\\1@", 'aaxxxaa'); // 1

怎么了?

4

1 回答 1

2

您需要检查每个字符的否定条件。

(aa|bb)((?!\\1).)*\\1

您还需要添加锚点。

^(aa|bb)((?!\\1).)*\\1$

在线查看它:ideone

于 2012-07-26T10:08:21.753 回答