2016-04-25 60 views
0

前三個字符必須是大寫字母,不包括I,O,S或Z.然後是一個短劃線,然後是四個字符,可以是除3以外的任何其他字符。我有這個,但是第一個負向預覽也是捕獲外面的東西的第一個捕獲組。我想拍攝AAA-444Z例如。多重負向預測

回答

0

你應該從你的樣子刪除.*未來,因爲你想匹配3個字符並將限制數從捕獲組中移出。還使用了否定的字符類最後一部分:

^((?![IOSZ])[A-Z]){3}-[^3]{4}$ 

Demo

如果你想提前使用兩個負外觀使用下列內容:

^((?![IOSZ])[A-Z]){3}-((?!3).){4}$ 

Demo

注意點當你使用環視時,你想要指定一個模式是在一個特定的模式之後或之前,當你想要lin t需要說明正則表達式引擎的角色數量,以考慮整個基於查找模式的限制。在第一個(?![IOSZ])[A-Z])和第二個((?!3).)

+0

謝謝我想這樣做與兩個負面lookaheads瞭解機制 – ocram

+1

@ocram檢查編輯。 – Kasramvd

+0

'^((!![IOSZ])([AZ] {3})) - ((?!3)(。{4}))$'也會這樣做 – ocram

0

你不需要任何前瞻這一要求,你可以使用這個表達式:

^[A-HJ-NP-RT-Y]{3}-[^3]{4}$ 
  • [A-HJ-NP-RT-Y]{3}將匹配大寫字母不在I, O, S or Z 3個實例。
  • [^3]{4}匹配任何不是3的字符。

RegEx Demo

按照下面的評論,如果你真的要負向前看符號才使用:

^(?:(?![IOSZ])[A-Z]){3}-(?:(?!3).){4}$ 

Regex Demo 2

+0

謝謝。我想用負面的前瞻來做到這一點,一般不會回答問題。 – ocram

+0

好吧檢查更新的查找正則表達式的答案。 – anubhava

+1

非常感謝!我不知道非捕獲組 – ocram