Regex lookahead, lookbehind и атомные группы

Я нашел эти вещи в своем теле регулярных выражений, но у меня нет понятия, для чего я могу их использовать. Есть ли у кого-нибудь примеры, чтобы я мог понять, как они работают?

(?!) - negative lookahead (?=) - positive lookahead (?<=) - positive lookbehind (?) - atomic group 

    3 Solutions collect form web for “Regex lookahead, lookbehind и атомные группы”

    Примеры

    Учитывая строку foobarbarfoo :

     bar(?=bar) finds the 1st bar ("bar" which has "bar" after it) bar(?!bar) finds the 2nd bar ("bar" which does not have "bar" after it) (?< =foo)bar finds the 1st bar ("bar" which has "foo" before it) (? 

    Вы также можете комбинировать их:

     (?< =foo)bar(?=bar) finds the 1st bar ("bar" with "foo" before it and "bar" after it) 

    Определения

    Посмотрите вперед положительный (?=)

    Найти выражение A, где выполняется выражение B:

     A(?=B) 

    Посмотрите вперед отрицательный (?!)

    Найти выражение A, где выражение B не выполняется:

     A(?!B) 

    Следите за положительным (?< =)

    Найти выражение A, где выражение B предшествует:

     (?< =B)A 

    Следите за отрицательным (?< !)

    Найти выражение A, где выражение B не предшествует:

     (?< !B)A 

    Атомные группы (?>)

    Атомная группа - это не захватывающая группа, которая выходит из группы и выбрасывает все альтернативы после первого совпадения шаблона внутри группы, поэтому откат отключается.

    Неатомная группа позволит вернуться назад, она все равно найдет первое совпадение, а затем, если совпадение произойдет неудачно, оно вернется и найдет следующее совпадение, пока не будет найдено совпадение для всего выражения или все возможности исчерпаны.

    • Неатомная группа в выражении (foo|foot)s примененная к foots будет:

      1. соответствуют его 1-й альтернативе foo , а затем не выполняются, так как s не сразу следует за foots , а назад - к его второй альтернативе;
      2. соответствуют его второй альтернативной foot , затем преуспевайте, так как s сразу следует за foots и останавливается.
    • Атомная группа в выражении (?>foo|foot)s примененная к foots будет соответствовать ее 1-му альтернативному foo , затем сбой, поскольку s не сразу следует, и останавливается, когда отключение отключено.

    Некоторые ресурсы

    Lookarounds – это утверждения с нулевой шириной. Они проверяют регулярное выражение (вправо или влево от текущей позиции – на основе вперед или назад), преуспевают или терпят неудачу, когда совпадение найдено (на основе положительного или отрицательного) и отбрасывает согласованную часть. Они не потребляют никакого символа – соответствие для регулярного выражения, следующего за ними (если есть), будет начинаться с одной и той же позиции курсора.

    Подробнее читайте в файле regular-expression.info .

    • Положительный взгляд:

    Синтаксис:

     (?=REGEX_1)REGEX_2 

    Матч, только если REGEX_1 соответствует; после сопоставления REGEX_1 совпадение отменяется, и поиск REGEX_2 начинается с той же позиции.

    пример:

     (?=[a-z0-9]{4}$)[az]{1,2}[0-9]{2,3} 

    REGEX_1 – [a-z0-9]{4}$ который соответствует четырем алфавитно-цифровым символам, за которыми следует конец строки.
    REGEX_2 – [az]{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_

    Look-behind похож на look-ahead: он просто смотрит за текущую позицию курсора. Некоторые ароматы регулярных выражений, такие как javascript, не поддерживают утверждения look-behind. И большинство ароматов, которые его поддерживают (PHP, Python и т. Д.), Требуют, чтобы обратная сторона имела фиксированную длину.

    • Атомные группы в основном отбрасывают / забывают последующие токены в группе после совпадения токена. Проверьте эту страницу на примерах атомных групп

    Грохоты быстро исчезают.
    Как отличить lookahead и lookbehind? Пройдите 2 минуты тура со мной:

     (?=) - positive lookahead (?< =) - positive lookbehind 

    предполагать

      ABC #in a line 

    Теперь, мы спрашиваем B, где вы?
    B имеет два решения, объявляющих его местоположение:

    Один, B имеет A вперед и имеет C bebind
    Два, B впереди (lookahead) C и сзади (lookhehind) A.

    Как мы видим, в обоих решениях противоположные и дальнейшие противоположны.
    Regex - это решение Two.

    Interesting Posts

    Без пароля SSH (Windows -> CentOS)

    Создание нового компьютера – без дисплея, без звуковых сигналов

    Абстрактный интерфейс Java

    Удалить с Присоединиться к MySQL

    Excel: удалить только буквенные символы (сохранить специальные символы)

    Linux: обмен беспроводным подключением через тот же беспроводной интерфейс

    Как имитировать событие Touch в Android?

    Какое максимальное разрешение поддерживается стандартным адаптером DVI-VGA?

    Показывать доступные для пользователя размеры файлов в команде PowerShell по умолчанию

    Переназначение вывода процесса началось локально с помощью PSExec

    Как настроить компьютер для загрузки с сетевого диска

    Как читать CSV-данные в массив записей в NumPy?

    В Windows 7 как отключить прокрутку панели инструментов?

    Целочисленный class-shell и оператор == – где указано поведение?

    Seagate 1 TB Внешний диск, зашифрованный с помощью Bitlocker по ошибке

    Давайте будем гением компьютера.