正则表达式 - 检索特定的星号分隔值字符串

时间:2014-10-15 23:20:42

标签: sql regex oracle

我需要检索字符串的特定部分,其中的值由星号

分隔

在下面的示例中,我需要检索位于6到7星号之间的字符串 Client Contact Center Seniors2

我对正则表达式相当新,并且设法找到使用* [\ w] + *

选择2个星号之间的值

有没有办法指定使用正则表达式查看哪个星号,或者是否有更好的方法来检索我所追求的字符串?

字符串:
2 * J25 *所有者11 *所有者组2 * L231 *客户联系中心客户中心29 *客户联络中心老年人2 * K20 * 0 * 2 * C110 * SR_STAT_ID2 * N18 *参考2 * O10 *

注意:我将使用REGEXP_LIKE(string, regex)在Oracle SQL中使用此正则表达式。

2 个答案:

答案 0 :(得分:0)

*是一个正则表达式运算符,需要进行转义,除非在包含字符列表的括号内使用。您可以使用此简化模式来提取 第七个字。

regexp_substr(Audits.audit_log,'[^*]+',1,7)

SQL Fiddle

查询1

with x(y) as (
  select '2*J25*Owner11*Owner Group2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*Client Contact Centre Seniors2*K20*0*2*C110*SR_STAT_ID2*N18*Referred2*O10*'
  from dual
  )
select regexp_substr(y,'([^*]+)\*',1,7,null,1)
from x

<强> Results

| REGEXP_SUBSTR(Y,'([^*]+)\*',1,7,NULL,1) |
|-----------------------------------------|
|          Client Contact Centre Seniors2 |

查询2

with x(y) as (
  select '2*J25*Owner11*Owner Group2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*Client Contact Centre Seniors2*K20*0*2*C110*SR_STAT_ID2*N18*Referred2*O10*'
  from dual
  )
select regexp_substr(y,'[^*]+',1,7)
from x

<强> Results

|   REGEXP_SUBSTR(Y,'[^*]+',1,7) |
|--------------------------------|
| Client Contact Centre Seniors2 |

答案 1 :(得分:0)

您也可以使用INSTRSUBSTR。简单快速,但不像REGEXP_SUBSTR那样简洁。

with t as (   
  select '2*J25*Owner11*Owner Group2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*Client Contact Centre Seniors2*K20*0*2*C110*SR_STAT_ID2*N18*Referred2*O10*' testvalue
  from dual
)
select substr(testvalue, instr(testvalue, '*', 1, 6)+1, instr(testvalue, '*', 1, 7) - instr(testvalue, '*', 1, 6) - 1)
from t;