2016-04-25 121 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