SQL Regex для поиска домена с общим именем - PullRequest
0 голосов
/ 20 октября 2011

В одной из моих таблиц указан следующий пример данных:

sub1.domain.com
domain.com
sub1.sub2.domain.com
*. Domain.com

Обновлено
Также имеется нДВУ
* .domain.co.uk



естьспособ / регулярное выражение в Oracle, которое может помочь мне извлечь только имя домена - "domain.com" из строки. Я пробовал несколько регулярных выражений, но это не помогло.Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Вы можете использовать следующее регулярное выражение, совпадающее с чем-то_without_a_dot.something_without_a_dot в конце строки. Вы получите ответ в первой группе. Если вам также нужен домен верхнего уровня, вы можете заключить в () все, кроме $.

([^.]+)\.[^.]+$

В SQL это дает:

SQL> select regexp_replace('sub1.sub2.domain.com', '^.*?([^.]+)\.[^.]+$', '\1') from dual;

REGEXP
------
domain

Нежадный .*? в начале позволяет игнорировать начало строки.

Чтобы получить доменное имя плюс ДВУ:

SQL> select regexp_replace('sub1.sub2.domain.com', '^.*?([^.]+\.[^.]+)$', '\1') from dual;

REGEXP_REP
----------
domain.com

Для учета co.uk:

SQL> select regexp_replace('sub1.sub2.domain.co.uk', '^.*?([^.]+\.(co\.uk|[^.]+))$', '\1') from dual;

REGEXP_REPLA
------------
domain.co.uk
0 голосов
/ 20 октября 2011

Пока я печатал свой ответ, парень выше дал хорошее регулярное выражение. Я думаю, что вы могли бы использовать REGEXP_REPLACE в своем предложении выбора.

REGEXP_REPLACE(fieldname, '([^.]+)\.([^.]+)$', '\1\.\2') as fieldname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...