我有一个这样的字符串:
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
答案 0 :(得分:6)
REGEXP_REPLACE
REGEXP_REPLACE(title,'^[^:]+:[^:]+:(.*)$', '\1') as Title
答案 1 :(得分:4)
Oracle的正则表达式函数往往是CPU密集型而非替代品。 Tom Kyte的建议是“however, if you can do it without regular expressions - do it without them. regular expressions consume CPU hugely.”
不使用正则表达式的替代方法是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
基准标记留给读者练习。
答案 2 :(得分:1)
这应该有效:
^[^:]+:[^:]+:(.*)$