Использование регулярного выражения для сопоставления всего после двоеточия - PullRequest
3 голосов
/ 16 августа 2011

У меня есть такая строка:

192.168.114.182:SomethingFun-1083:EOL/Nothing Here : MySQL Database 4.12
192.168.15.82:SomethingElse-1325083:All Types : PHP Version Info : 23

Я пытаюсь выбрать этот элемент в базе данных Oracle (используя REGEXP_SUBSTR) и получить весь оставшийся текст после второго двоеточия (:).

Итак, в конце я бы хотел получить эти значения:

EOL/Nothing Here : MySQL Database 4.12
All Types : PHP Version Info : 23

Я пробовал это, но он не нашел что-то, что работает.

REGEXP_SUBSTR(title,'[^:]+',1,3) as Title -- doesn't work if last field has ":"
REGEXP_SUBSTR(title,'(?:[^:]*:)+([^:]*)') as Title

Ответы [ 3 ]

6 голосов
/ 16 августа 2011

как насчет REGEXP_REPLACE

REGEXP_REPLACE(title,'^[^:]+:[^:]+:(.*)$', '\1') as Title
4 голосов
/ 16 августа 2011

Функции регулярных выражений Oracle, как правило, интенсивно используют ЦП по сравнению с альтернативами.Совет Тома Кайта: " однако, если вы можете сделать это без регулярных выражений - делайте это без них. Регулярные выражения сильно нагружают ЦП. "

Альтернативой, не использующей регулярные выражения, будет substr(test_values, instr(test_values, ':', 1, 2) + 1)

SQL> create table t (test_values varchar2(100));

Table created.

SQL> insert into t values ('192.168.114.182:SomethingFun-1083:EOL/Nothing Here : MySQL Database 4.12');

1 row created.

SQL> insert into t values ('192.168.15.82:SomethingElse-1325083:All Types : PHP Version Info : 23');

1 row created.

SQL> commit;

Commit complete.

SQL> select substr(test_values, instr(test_values, ':', 1, 2) + 1)
  2  from t;

SUBSTR(TEST_VALUES,INSTR(TEST_VALUES,':',1,2)+1)
-----------------------------------------------------
EOL/Nothing Here : MySQL Database 4.12
All Types : PHP Version Info : 23

Разметка слева в качестве упражнения для читателя.

1 голос
/ 16 августа 2011

Это должно работать:

^[^:]+:[^:]+:(.*)$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...