Удалить префикс и суффикс с помощью регулярного выражения оракула - PullRequest
3 голосов
/ 09 августа 2011

У меня есть несколько записей, которые идут с префиксом и суффиксом (могут приходить или не приходить). Я пытаюсь вычислить REGEXP_REPLACE, которое всегда будет возвращать мне параметризованное значение.

Моя попытка на данный момент:

with teste as (
select '+123145@domain.com' as num from dual
union
select '0054321@domain.com' as num from dual
union
select '006789' as num from dual
union
select '+9876' as num from dual
union
select '13579@domain.com' as num from dual
union
select '123456789' as num from dual
)
select REGEXP_REPLACE(num,'^00(.*)\@.*$|^\+(.*)\@.*$','\1') from teste

но не совсем там.

Вывод этого должен быть:

num
12345
54321
6789
9876
13579
123456789

1 Ответ

4 голосов
/ 09 августа 2011

Попробуйте это здесь

REGEXP_REPLACE(num,'^(00|\+)?(\d*)(\@.*)?$','\2')

См. Здесь онлайн на Regexr

Я не уверен, что Oracle regex способен сделать.Критическими точками может быть \d, означающее цифру, если это не работает, замените \d на [0-9].

(?:) - это группы без захвата.Внутренний шаблон не сохраняется в группе захвата, поэтому вы всегда можете заменить его на первую группу захвата \1

Я также изменил с ваших альтернатив, используя |, на необязательные детали, использующие ? после не захватагрупп.Две скобки в вашем «ИЛИ» привели к тому, что результат иногда находится в группе 1 (когда совпадает первая альтернатива), а иногда в группе 2 (когда совпадает вторая альтернатива)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...