RegEx для разрешения алфавитно-цифрового при запуске и дефисе после этого

Я публикую решение в виде отдельного ответа, надеясь, что другие пользователи могут извлечь из него пользу. Вот оно:

Theorem cancel : forall (i j k : nat),
  ((add i j) = (add i k)) -> (j = k).
Proof.
intros i j k H.
induction i.
apply H.
simpl in H.
apply eq_add_S in H.
apply IHi in H.
assumption.
Qed.
9
задан GustyWind 20 January 2009 в 07:55
поделиться

4 ответа

Если Вы не хотите соответствовать тире mutiple друг после друга:

^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$

Это будет соответствовать: a, a-a, aaa-a, aaa-a-aaa-a-aaa-a, и т.д.
Но нет: -, -a, a-, a--a, a-a-a-, a-a--a, и т.д.

14
ответ дан 4 December 2019 в 07:05
поделиться
^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$
8
ответ дан 4 December 2019 в 07:05
поделиться

Вот POSIX +, смотрят-akead вариант выполнения его:

^[[:alnum:]](?:[[:alnum:]-](?!-$))*$

Это также позволяет всего один символ как соответствие. Это не таким образом читаемо, все же.;-)

Отметьте это [[:alnum:]] предопределенный класс символов стенографии, эквивалентный [a-zA-Z0-9], быть более эффективным, но в других отношениях взаимозаменяемым. Не каждая regex разновидность знает эти классы POSIX, используйте традиционную форму, если Вам нравится.

Вот тот, который не позволяет несколько последовательных дефисов, и это короче:

^(?:[[:alnum:]]+(?:-(?!$))?)+$

и это - форма неPOSIX:

^(?:[a-zA-Z0-9]+(?:-(?!$))?)+$
5
ответ дан 4 December 2019 в 07:05
поделиться

Я сделал бы предложение:

^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$

Это также соответствует строкам длины 1.

5
ответ дан 4 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: