Может ли кто-нибудь (с большим опытом сопоставления регулярных выражений) пояснить, почему следующий запрос возвращает (что я считаю) неожиданные результаты в Oracle 12?
select regexp_substr('My email: test@tes6t.test', '[^@:space:]+@[^@:space:]+')
from dual;
Ожидаемый результат: test@tes6t.test
Фактический результат: t@t
Другой пример:
select regexp_substr('Beneficiary email: super+test.media.beneficiary1@gmail.com', '[^@:space:]+@[^@:space:]+')
from dual;
Ожидаемый результат: super + test.media. beneficiary1@gmail.com
Фактический результат: ry1@gm
РЕДАКТИРОВАТЬ: я дважды проверил, и это не связано с Oracle SQL, но такое же поведение применимо к любому механизму регулярных выражений. Даже при упрощении регулярного выражения до [^: space:] + @ [^: space:] + результаты такие же. Мне любопытно узнать, почему он не соответствует всем непробельным символам до и после знака @. И почему иногда он соответствует 1 символу, иногда 2 или 3 или более символам, но не всем.