Дешифрование простого регулярного выражения

Регулярное выражение имеет вид

(\d{3,4}[.-]?)+

образец текста

707-7019-789

Мой прогресс пока

(            )+  a capturing group, capturing one or more
 \d{3,4}         digit, in quantities 3 or 4
        [.-]?    dot (or something) or hyphen, in quantities zero or one <-- this is the part I'm interested in

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

707+123-4567

то?

Ответы

Ответ 1

. в символьной группе [] является буквальным ., у него нет специального значения "ничего". [.-]? означает "точка или дефис или ничего", так как вся группа становится необязательной с ?.

Ответ 2

Скобки удаляют функциональность точки. Скобки означают "Диапазон" / "Класс символов". Таким образом, вы говорите "Выбрать" из списка/диапазона/символьного класса. Вы не говорите, что выбираете из списка "все" - (что-то есть обычное значение.)

Ответ 3

[.-]?

Что это означает буквально:

класс символов [.-]

  • Сопоставьте только один из следующих символов: . и - буквально.

ленивый квантификатор ?

  • Повторите последний токен между 0 и 1 раз, как можно несколько раз.