Php проверить конкретный шаблон

В python re вы можете перейти от номера к альфа-букве верхнего регистра. Итак.

import re
test = "01234ABCDEFGHIJKabcdefghijk01234abcdefghijkABCDEFGHIJK"
re.compile(r'[0-f]+').findall(test) # Bad: matches all uppercase alpha chars
## ['01234ABCDEFGHIJKabcdef', '01234abcdef', 'ABCDEFGHIJK']
re.compile(r'[0-F]+').findall(test) # Partial: does not match lowercase hex chars
## ['01234ABCDEF', '01234', 'ABCDEF']
re.compile(r'[0-F]+', re.I).findall(test) # Good
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
re.compile(r'[0-f]+', re.I).findall(test) # Good
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
re.compile(r'[0-Fa-f]+').findall(test) # Good (with uppercase-only magic)
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
re.compile(r'[0-9a-fA-F]+').findall(test) # Good (with no magic)
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']

Это делает простейшее регулярное выражение UUID Python:

re_uuid = re.compile("[0-F]{8}-([0-F]{4}-){3}[0-F]{12}", re.I)

Я оставлю его как упражнение для чтения, чтобы использовать timeit для сравнения производительности эти.

Наслаждайтесь. Сохраните его Pythonic ™!

ПРИМЕЧАНИЕ. Эти интервалы также будут соответствовать :;<=>?@', поэтому, если вы подозреваете, что могли бы дать вам ложные срабатывания, не используйте ярлык. (Спасибо, Оливер Обер, за то, что указали это в комментариях.)

0
задан Himanshu Agrawal 4 March 2019 в 11:26
поделиться

1 ответ

Алфавиты и цифры также должны быть добавлены к классу персонажей в середине. Обратите внимание, что вам не нужно экранировать дефис, если он находится в конце класса символов.

^[a-zA-Z0-9][@a-zA-Z0-9-]*[a-zA-Z0-9]$
              ^^^^^^^^^

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

/^[a-z0-9][@a-z0-9-]*[a-z0-9]$/i

Regex101 demo | Php demo

0
ответ дан The fourth bird 4 March 2019 в 11:26
поделиться
Другие вопросы по тегам:

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