Lookarounds - это утверждения нулевой ширины. Они проверяют регулярное выражение (вправо или влево от текущей позиции - на основе впереди или сзади), успешно или не удается, когда найдено совпадение (на основании положительного или отрицательного значения), и отбрасывают совпадающую часть. Они не потребляют никаких символов - совпадение с регулярным выражением, следующее за ними (если оно есть), начнется с той же позиции курсора.
Читайте регулярно-expression.info для более подробной информации.
Синтаксис:
(?=REGEX_1)REGEX_2
Совпадение только в случае совпадения REGEX_1; после сопоставления REGEX_1 совпадение отбрасывается, и поиск REGEX_2 начинается с той же позиции.
пример:
(?=[a-z0-9]{4}$)[a-z]{1,2}[0-9]{2,3}
REGEX_1 [a-z0-9]{4}$
соответствует четырем буквенно-цифровым символам, за которыми следует конец строки.
REGEX_2 [a-z]{1,2}[0-9]{2,3}
соответствует одной или двум буквам, за которыми следуют две или три цифры.
REGEX_1 гарантирует, что длина строки действительно равна 4, но не использует никаких символов, поэтому поиск REGEX_2 начинается с того же места. Теперь REGEX_2 удостоверяется, что строка соответствует некоторым другим правилам. Без заблаговременности он будет соответствовать строкам длиной три или пять.
Синтаксис:
(?!REGEX_1)REGEX_2
Совпадение только в том случае, если REGEX_1 не совпадает; После проверки REGEX_1 поиск REGEX_2 начинается с той же позиции.
пример:
(?!.*\bFWORD\b)\w{10,30}$
Предварительная часть проверяет наличие FWORD
в строке и завершается ошибкой, если находит ее. Если он не находит FWORD
, предварительный просмотр завершается успешно, и следующая часть проверяет, что длина строки составляет от 10 до 30 и содержит только словаa-zA-Z0-9_
Взгляд назад похож на прогноз вперед: он просто смотрит позади текущей позиции курсора. Некоторые разновидности регулярных выражений, такие как javascript, не поддерживают косвенные утверждения. И большинство разновидностей, которые его поддерживают (PHP, Python и т. Д.), Требуют, чтобы эта часть просмотра имела фиксированную длину.
- Атомные группы в основном отбрасывают / забывают последующие токены в группе, когда токен совпадает. Проверьте эту страницу для примеров атомных групп