Попробуйте это здесь
REGEXP_REPLACE(num,'^(00|\+)?(\d*)(\@.*)?$','\2')
См. Здесь онлайн на Regexr
Я не уверен, что Oracle regex способен сделать.Критическими точками может быть \d
, означающее цифру, если это не работает, замените \d
на [0-9]
.
(?:)
- это группы без захвата.Внутренний шаблон не сохраняется в группе захвата, поэтому вы всегда можете заменить его на первую группу захвата \1
Я также изменил с ваших альтернатив, используя |
, на необязательные детали, использующие ?
после не захватагрупп.Две скобки в вашем «ИЛИ» привели к тому, что результат иногда находится в группе 1 (когда совпадает первая альтернатива), а иногда в группе 2 (когда совпадает вторая альтернатива)