Tiene problemas para entender grupos de captura y referencias

Con el deseo de poner un poco de orden en mi conocimiento de las expresiones regulares, decidí leer un libro sobre ellas, Introducción a las expresiones regulares . Y sé que es una tontería, pero uno de los ejemplos introductorios no tiene sentido para mí.

(\d)\d\1 

Texto de ejemplo:

 123-456-7890 

(debe capturar el primer número, 123 )

¿Alguien puede explicar lo que está pasando aquí?

Por lo que puedo deducir, el primero \d captura el número 123. Las \1 referencias hacia atrás (marcas) del grupo para su uso posterior. El paréntesis limita el scope del grupo. Pero, ¿qué hace el segundo?

Explicación simple, como a un niño pequeño o un golden retriever son preferidos.

\d es solo un dígito.

Esta expresión regular no coincide con la cadena "123-456-7890" pero concuerda con "323" (que podría ser parte de una cadena mayor, por ejemplo "323-456-7890" ):

  (\d) : first digit ("3") \d : another digit ("2") \1 : first group (which was "3") 

Ahora, si su libro pretende que (\d)\d\1 debe capturar "123" en "123-456-7890" , entonces podría contener un error …

(\d)\d\1 paso a paso:

  1. La primera \d coincide con un dígito
  2. Y los paréntesis () marcan esto como un grupo de captura: este es el primero, por lo que el dígito se recuerda como “grupo 1”
  3. El segundo \d dice que hay otro dígito
  4. \1 dice “aquí está el valor de nuestro grupo anterior 1”: ese es el dígito que se emparejó en el paso 1.

Así que, como dijimos anteriormente, la expresión regular debería coincidir con una secuencia de tres dígitos, de los cuales el primero y el tercero son iguales.