我有一个以这种格式出现的字符串
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 ?
答案 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
,这本书是一个不错的资料来源