Использовать группы, чтобы санкционировать текст, который не продолжал бы главный файл XYYX

Я изучаю RegEx, и он назвал мне много вниманием пример:
Regex Гольф (видеть уровень 6, "Abba")

Выдвинутая проблема состоит в том, чтобы выдавать все слова, которые не содержат буквы, которые оставались бы главный файл XYYX.

Например, оставляя снаружи:

  • abba
  • anallagmatic
  • bassarisk
  • chorioallantois
  • coccomyces


Один из предложенных ответов пошел

^(?!.*(.)(.)\2\1)

Regular expression visualization

Debuggex Demo


Здесь моя интерпретация выражения:

  1. Начало линии ^
  2. Если он не является следуемым 0 или + символы .*
  3. Группируй следующий характер в 1 (.)
  4. Группируй следующий характер в 2 (.)
  5. Группа 2 \2
  6. Группа 1 \1

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

Кто-то может давать более интуитивную интерпретацию?

22
задан 24.03.2017, 02:33
1 ответ

Здесь есть другое объяснение:

  • ^, начало цепи
  • (?!, смотреть вперед, чтобы видеть, нет ли следующего
  •    .*, любой символ (кроме \n), самое большее возможное количество
  •    (.), любой символ (кроме \n), 1er группа
  •    (.), любой символ (кроме \n), 2-ая группа
  •    \2, то же самое, что и 2-ая группа
  •    \1, то же самое что 1er группа
  • ), конец смотрения вперед

То, что делает это регулярное выражение, состоит в том, чтобы искать в цепи текст, который не был бы продолжен (с начала той же самой) главным файлом .*(.)(.)\2\1.

Например, для цепи anallagmatic, главный файл .*(.)(.)\2\1 он выполняется в anallagmatic. Однако, поскольку не хочет находиться такой главный файл в цепи, тогда регулярное полное выражение, ^(?!.*(.)(.)\2\1), он не выполняется.

В зависимости от осуществления механизма регулярных выражений 1, этот будет искать главный файл, основываясь на регулярном выражении (regex-directed) или на тексте (text-directed), на цепи и сообщит, был ли он расположенным напротив или нет.

Например, Рехекс Дебугхер сайта https://regex101.com/ покажи шаги, осуществленные механизмом до того, чтобы «бить козырем» (не находить совпадения) с текстом anallagmatic:


Замечания

  1. См. Фирст Лоок at How в Рехекс Энхине Воркс Интернальи (на английском).
24
ответ дан 24.11.2019, 14:31
  • 1
    Уже я понимаю (.)(.)\1\2, это главный файл ABBA, где A=1 B=2 и поэтому \2\1= BA все это равно ABBA, но я не понимаю логику в .* – The One 28.04.2016, 16:55
  • 2
    @Tuco Сначала, expresió n должен быть брошенной якорь в ^, иначе podrí чтобы совпадать с abba<acá>xxxx например (что является противоположным желанному). Итак, как está брошенный якорь в начало текста, .* позволяет, что были потрачены необходимые символы для того, чтобы важная часть ((.)(.)\2\1) смогла находить совпадение. И, когда это совпадение происходит, как está внутри aserció n отрицание, глобальная попытка не удается. – Mariano 23.03.2017, 19:45