Непонимание понимания групп и обратных ссылок

Желая внести некоторый заказ в свои знания о регулярных выражениях, я решил ознакомиться с книгой о них, "Представляя регулярные выражения". И я знаю это глупо, но один из вводных примеров для меня не имеет смысла.

(\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: регулярное выражение должно соответствовать последовательности из трех цифр, из которых первая и третья равны.