Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正则表达式-检索特定的星号分隔值字符串_Sql_Regex_Oracle - Fatal编程技术网

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

Sql 正则表达式-检索特定的星号分隔值字符串,sql,regex,oracle,Sql,Regex,Oracle,我需要检索字符串的特定部分,该部分的值由星号分隔 在下面的示例中,我需要检索字符串Client Contact center Seniors2,它位于星号6和7之间 我对正则表达式相当陌生,只使用*[\w]在两个星号之间找到并选择了一个值+* 有没有一种方法可以指定使用正则表达式查看的星号数,或者有没有更好的方法可以检索我要查找的字符串 字符串: 2*J25*Owner11*OwnerGroup2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*CLIENTCONT

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

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

我对正则表达式相当陌生,只使用*[\w]在两个星号之间找到并选择了一个值+*

有没有一种方法可以指定使用正则表达式查看的星号数,或者有没有更好的方法可以检索我要查找的字符串

字符串: 2*J25*Owner11*OwnerGroup2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*CLIENTCONTACTCENTRESENIORSQUEUE29*ClientContactCentreseSeniors 2*K20*0*2*C110*SR_Status_ID2*N18*Referred2*O10*

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

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

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

:

问题2:

:

你也可以使用INSTR和SUBSTR。简单快速,但不如REGEXP\u SUBSTR那么简洁


在中等功能的正则表达式语言中,可以使用诸如^[^*]*\*{6}[^*]*\*之类的表示法,其中第一个括号中的表达式匹配6个单位的“零个或多个非星号,后跟一个星号”,第二个匹配“零个或多个非星号”,最后的\*匹配第七个星号。您必须将其调整为Oracle实际支持的正则表达式语言。我没有查看它使用了哪个正则表达式变量。谢谢Jonathan,我在oracle中使用了以下内容,它从您提供的表达式regexp_substrAudits.audit_log,“^[^*]**{6}[^*]*”,1,1,null,2您的右侧sam返回第二个捕获组,我使用regexp_substrAudits返回字符串
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
| REGEXP_SUBSTR(Y,'([^*]+)\*',1,7,NULL,1) |
|-----------------------------------------|
|          Client Contact Centre Seniors2 |
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
|   REGEXP_SUBSTR(Y,'[^*]+',1,7) |
|--------------------------------|
| Client Contact Centre Seniors2 |
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;