Регулярное выражение. Начинается с и не равно - PullRequest
0 голосов
/ 22 июня 2010

У меня есть строка, которую нужно проверить.

Первые два символа должны состоять из AG или Z, но не может быть следующей комбинацией: ГБ или ZZ.

Какя могу выразить это в регулярном выражении?

Ответы [ 3 ]

8 голосов
/ 22 июня 2010

Отрицательный взгляд сзади подходит как нельзя лучше.

[A-GZ]{2}(?<!GB)(?<!ZZ)

Пояснение:

[A-GZ]{2} соответствует ровно двум символам, оба из которых должны быть A-G или Z.
(?<!GB) соответствует только в том случае, если два предыдущих сопоставленных символа не были ГБ.
(?<!ZZ) соответствует, только если два предыдущих сопоставленных символа не были ZZ.

Отрицательный lookbehind, как и все операции lookahead и lookbehind, имеет нулевую ширину, что означает, что он не меняет положение курсора. Вот почему вы можете связать вместе два ряда подряд, как я. Мне нравится это лучше, чем |, потому что это проясняет два случая, которые не разрешены. И выполнение этого дважды должно иметь примерно тот же эффект времени выполнения, что и | оператор в единственном взгляде.

3 голосов
/ 22 июня 2010
^([A-F][A-GZ]|G[AC-GZ]|Z[A-G]).*
0 голосов
/ 22 июня 2010

^ ([AF] [A-GZ] | G [AC-GZ] | Z [AG])

...