2012-07-26 40 views
1

以aa或bb开头。结束它(后退参考)。并没有它在中间。负面回顾中的反向参考

这是确定没有 “或” 和后面的参考 - aa.*?(?!aa).*?aa
但它不与他们的工作: (aa|bb).*?(?!\1).*?\1

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

有什么不对?

+0

哦力另行通知''preg_match''! – Cylian 2012-07-26 10:09:44

回答

2

你需要检查你的否定条件为每个字符

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

您还需要添加锚点。

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

看到它联机工作:ideone

+0

@MarkByres:+1,很好。 – Cylian 2012-07-26 10:10:39