Oracle regexp_substr - 如何提取不包括标记字符的文本

时间:2011-12-02 17:11:54

标签: sql regex oracle

我有一个以这种格式出现的字符串

Transaction 'pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)' failed due to connection error

我需要在'和(。

之间提取文本 在此示例中

pqr_111_xyz_222。

以下查询返回'pqr_111_xyz_222(

select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '''.+\(') from dual;

如何修改正则表达式(或使用此单个查询中可包含的任何其他技术)以便标记'和(被排除,我只是 pqr_111_xyz_222

4 个答案:

答案 0 :(得分:4)

您可以改为使用REGEXP_REPLACE

regexp_replace('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '.*''(.+)\(.*', '\1')

答案 1 :(得分:2)

select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '\w+',1,2) from dual;

答案 2 :(得分:1)

您可以使用substr和instr包围函数调用,以删除结果的第一个和最后一个字符。缺点是我认为你必须额外调用regexp_substr才能将结果的长度传递给substr / instr。

答案 3 :(得分:1)

如果你想深入研究使用反向引用(regexp_replace选项中需要)http://www.amazon.com/Regular-Expressions-Reference-OReilly-ebook/dp/B0026OR38A/ref=sr_1_4?ie=UTF8&qid=1323109619&sr=8-4

,这本书是一个不错的资料来源