2012-07-26 36 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