Я использую Oracle 11g. Следующий оператор занимает около 3 секунд, чтобы выполнить:Regex зависает в Oracle 11g
select case when regexp_like(
'[email protected]',
'^[\-a-zA-Z0-9_''^&\+\?\:]+(\.?[\-a-zA-Z0-9_''^&\+\?\:]+)*@([a-zA-Z0-9]+\.)+[a-zA-Z]{2,3}$')
then 'true' else 'false' end
Добавление другого персонажа по электронному адресу:
'[email protected]'
занимает 6 секунд. Другой персонаж 12, затем 24, 48 и т. Д. Таким образом:
'[email protected]'
занимает около 96 секунд для запуска.
Однако удалить дефис:
'[email protected]'
и он работает мгновенно.
Кто-нибудь знает, что здесь происходит?
Независимо от проблемы производительности, вы, кажется, есть две опечаток есть: первые два класса символов содержат 'Az 'вместо' AZ'. Это включает в себя шесть символов '[\]^_ \' 'в шаблоне (поскольку их кодовые точки лежат между строчными и строчными буквами). Кроме того, нет необходимости в каких-либо экранах классов символов. –
Есть действительно хорошая [статья] (http://www.regular-expressions.info/email.html) для сопоставления адресов электронной почты; начать там. Не изобретайте велосипед. –