Непонимание понимания групп и обратных ссылок
Желая внести некоторый заказ в свои знания о регулярных выражениях, я решил ознакомиться с книгой о них, "Представляя регулярные выражения". И я знаю это глупо, но один из вводных примеров для меня не имеет смысла.
(\d)\d\1
Пример текста:
123-456-7890
(следует записать первое число, 123
)
Может ли кто-нибудь объяснить, что здесь происходит?
Насколько я могу судить, первая \d
фиксирует число 123. \1
обратные ссылки (метки) группы для последующего использования. Скобки ограничивают область действия группы. Но что делает вторая \d
?
Простое объяснение, как маленькому ребенку или золотому ретриверу, предпочтительнее.
Ответы
Ответ 1
\d
- это просто одна цифра.
Это регулярное выражение не соответствует строке "123-456-7890"
, но оно будет соответствовать "323"
(которое может быть частью большей строки, например "323-456-7890"
):
(\d) : first digit ("3")
\d : another digit ("2")
\1 : first group (which was "3")
Теперь, если ваша книга притворяется, что (\d)\d\1
должна записывать "123"
в "123-456-7890"
, тогда она может содержать ошибку...
Ответ 2
(\d)\d\1
шаг за шагом:
- Первая
\d
соответствует одной цифре
- И круглые скобки
()
отмечают это как группу захвата - это первая, поэтому цифра запоминается как "группа 1"
- Второй
\d
говорит, что есть еще одна цифра
-
\1
говорит: "вот значение из нашей предыдущей группы 1" - это цифра, которая была сопоставлена на шаге 1.
Итак, как уже говорила dystroy: регулярное выражение должно соответствовать последовательности из трех цифр, из которых первая и третья равны.