У меня есть строка, которая должна быть проверена.Регулярное выражение. Начинается с и не равно
Первые два символа должны быть составлены A-G или Z, но не могут быть следующей комбинацией: GB или ZZ.
Как выразить это в регулярном выражении?
У меня есть строка, которая должна быть проверена.Регулярное выражение. Начинается с и не равно
Первые два символа должны быть составлены A-G или Z, но не могут быть следующей комбинацией: GB или ZZ.
Как выразить это в регулярном выражении?
Отрицательный lookbehind наилучшим образом подходит для этого.
[A-GZ]{2}(?<!GB)(?<!ZZ)
Пояснение:
[A-GZ]{2}
точно соответствует два символа, оба из которых должны быть-G или Z.
(?<!GB)
соответствует только если предыдущие два символа совпадающая не было ГБ.
(?<!ZZ)
соответствует только двум предыдущим символам, но не ZZ.
Отрицательный lookbehind, как и все операции lookahead и lookbehind, равен нулю, что означает, что он не меняет позицию курсора. Вот почему вы можете объединить две строки подряд, как и я. Мне нравится это лучше, чем |, потому что он дает понять, что два случая, которые не разрешены. И выполнение этого дважды должно иметь примерно такой же эффект выполнения, как и | оператора в одном взгляде.
А также одна из более редких особенностей регулярных выражений (не работает, например, в JavaScript). Отрицательные образы более широко поддерживаются и одинаково просты: '^ (?! GB) (?! ZZ) [A-GZ] {2}' - также добавил '^', так как он указал «первые два символа» – gnarf
Good точки gnarf. – jdmichal
Что делать, если первые два символа должны оцениваться отдельно? [A-GZ] {1} [A-GXZ] {1} (? iBiryukov
^([A-F][A-GZ]|G[AC-GZ]|Z[A-G]).*
Наиболее совместим со многими вариантами регулярных выражений ... добавьте '^' к началу, чтобы получить часть «первых двух символов» для проверки ... – gnarf
@gnarf. '. *' В конце означает, что это полнотекстовый match –
@Michael Mrozek - Извините, но '^' и '$' никогда не подразумеваются в каких-либо языках регулярного выражения, которые я использую ... Вышеупомянутый шаблон может совпадать с 'ZZ AA aasdfasd', он просто будет соответствовать только' AA aasdfasd ' – gnarf
^([A-F] [A-GZ] | G [AC-GZ] | Z [A-G])
Какая библиотека регулярных выражений вы используете? –