По какому принципу данное регулярное выражение выбирает идентификаторы

У меня есть регулярное выражение, которые выбирает все слова или цифры, которые начинаются либо с буквы либо со знака _, просто отдельное число не выбирает:

([_A-z][_a-zA-Z0-9]*)

Например она выберет текст: a123, _123, abcd Но не выберет: 123,1(все числа), 3abc(выберет только abc). Вопрос вот в чем, зачем нам первое выражение [_A-z], если во втором выражении мы это продублировали, и почему если убрать его работать не будет?


Ответы (1 шт):

Автор решения: ReinRaus
(                    # начало 1-ой группы (сохраняемая группа)
   [_A-z]            # нижнее подчёркивание и любой символ из интервала с A по z,
                     # здесь же скрыта потенциальная ошибка (всё будет работать, но логика неправильная - смотрите таблицу ascii),
                     # видимо хотели сделать заглавная буква или подчеркивание, а это записывается так: [_A-Z]
   [_a-zA-Z0-9]*     # нижнее подчёркивание, любая буква латинского алфавита или цифра 0 и более раз
)                    # конец 1-ой группы

Теперь ответ на прямой вопрос:

Первое выражение не включает в себя цифры и буквы в нижнем регистре и определяет, что совпадение должно начинаться с буквы в верхнем регистре или подчеркивания

→ Ссылка