Почему не работает regexи как его починить?
От: Glestwid  
Дата: 21.08.23 21:08
Оценка:
Нужно сделать регэкс, который будет признавать валидным или пустую строку, или строку, состоящую ровно из 3 цифр. Пишу на https://regex101.com/ такое

^(\d{0})|(\d{3})$


Натравливаю на 999999 — считает валидным. Натравливаю на 999 — тоже валидное. Натравливаю на 9 и на пустую строку — снова все валидное. Что за хрень и как мне переписать его правильно?
Re: Почему не работает regexи как его починить?
От: CRT  
Дата: 21.08.23 21:30
Оценка: 3 (1)
Здравствуйте, Glestwid, Вы писали:


G>Что за хрень и как мне переписать его правильно?


^.{0}$|^\d{3}$

или так

^(.{0}|\d{3})$
(правда, зачем тебе группы)

а то что ты написал это "найди мне пустую строку в начале строки ИЛИ 3 цифры в конце строки"
Первое вообще любой входной строке удовлетворяет
Отредактировано 22.08.2023 17:07 CRT . Предыдущая версия . Еще …
Отредактировано 21.08.2023 21:39 CRT . Предыдущая версия .
Отредактировано 21.08.2023 21:35 CRT . Предыдущая версия .
Re[2]: Почему не работает regexи как его починить?
От: m2user  
Дата: 21.08.23 21:49
Оценка: +1
CRT>^(.{0}|\d{3})$
CRT>(правда, зачем тебе группы)

тогда уж лучше так
^(|\d{3})$
Re[3]: Почему не работает regexи как его починить?
От: CRT  
Дата: 21.08.23 21:58
Оценка:
Здравствуйте, m2user, Вы писали:

CRT>>^(.{0}|\d{3})$

CRT>>(правда, зачем тебе группы)

M>тогда уж лучше так

M>
M>^(|\d{3})$
M>


точно
или так
^$|^\d{3}$

просто .{0} явно и наглядно говорит "хочу 0 символов"
Re[3]: Почему не работает regexи как его починить?
От: _NN_ www.nemerleweb.com
Дата: 22.08.23 21:03
Оценка:
Здравствуйте, m2user, Вы писали:

CRT>>^(.{0}|\d{3})$

CRT>>(правда, зачем тебе группы)

M>тогда уж лучше так

M>
M>^(|\d{3})$
M>

А если группы не нужны, скорее всего тут не нужны.
То лучше их заранее убрать для быстродействия.

^(?:|\d{3})$
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Почему не работает regexи как его починить?
От: RushDevion Россия  
Дата: 23.08.23 08:20
Оценка:
На будущее посмотри https://regex101.com.
Вставляешь свой regexp, получаешь подробное описание.
Re[2]: Почему не работает regexи как его починить?
От: m2user  
Дата: 23.08.23 16:18
Оценка:
RD>На будущее посмотри https://regex101.com.
RD>Вставляешь свой regexp, получаешь подробное описание.

топикстартер о нем упоминает в стартовом сообщении.
IMHO пока сам не проведешь эксперимент, как работает alternation без скобочек, не поймешь в чем дело.
В документации от MS об этом случае явно не написано.
Re: Почему не работает regexи как его починить?
От: Aquilaware  
Дата: 25.08.23 12:11
Оценка: 1 (1) +1
Здравствуйте, Glestwid, Вы писали:

G>Нужно сделать регэкс, который будет признавать валидным или пустую строку, или строку, состоящую ровно из 3 цифр.


Каноническое регулярное выражение для такого:

^(\d{3})?$

\d — захватывает одну цифру, {3} делает это ровно три раза, ? делает захват опциональным.
Отредактировано 25.08.2023 12:12 Aquilaware . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.