Sql 捕获具有许多模式的起始字符

Sql 捕获具有许多模式的起始字符,sql,oracle,regex-group,regexp-replace,Sql,Oracle,Regex Group,Regexp Replace,我需要通过各种模式搜索从数据库对象中捕获起始字符 我已经尝试使用正则表达式,下面是我正在尝试的查询和预期的数据集 查询1 SELECT owner AS schema_name, object_name, object_type, REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1') as BEGINNING, count(*), round(100*ratio_to_report(

我需要通过各种模式搜索从数据库对象中捕获起始字符

我已经尝试使用正则表达式,下面是我正在尝试的查询和预期的数据集

查询1

SELECT
   owner AS schema_name, 
   object_name,        
   object_type,
   REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1') as BEGINNING,
   count(*),
   round(100*ratio_to_report(count(*)) over (), 4) percentage 
FROM
   dba_objects 
GROUP BY
   owner,
   object_name,
   object_type,
   REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1') 
ORDER BY
   percentage desc; 
预期数据集

不幸的是,我无法将下面的内容分开

#Tableau_6_sid:15251a_4i_2a-->#Tableau

/15722c29d_PhotoImageCameraPro-->/15722c29d

JAVA/15722c29d_PhotoImageQeee-->JAVA

如何解决

因此,如何捕获x之后的最后一个字符,下面是一个示例

查询2-捕获最后的字符

 select 
   owner, 
   object_name, 
   object_type, 
   regexp_substr(object_name, '[^_]*$') ENDING, 
   count(*) COUNT, 
   round(100*ratio_to_report(count(*)) over (), 4) percentage  
from 
   dba_objects  
   where object_name like '%/%'
group by 
   owner, 
   object_name, 
   object_type, 
   regexp_substr(object_name, '[^_]*$') 
   ORDER BY 
   percentage desc
预期数据集

不幸的是,我无法将下面的内容分开

Teradata/jdbc/EXAcore/MPPReader-->MPPReader

sqlj/modegen/engine/FuncInit-->FuncInit


moon/aio/af/ext/ISCII11$Decoder-->ISCII11$Decoder

对于正则表达式,您可以在字符类中添加匹配的
/
,然后使用另一个字符类匹配尽可能少的字符,直到下一个
/

如果模式不区分大小写,还可以添加
a-z

^([A-Za-z0-9$/#]+?)[/_].*

如果
/
#
只能在开头,您还可以选择匹配其中一个:

^([/#]?[A-Za-z0-9$]+)[/_].*

查看另一个

有关正则表达式,可以在字符类中添加匹配的
/
,然后使用另一个字符类匹配尽可能少的字符,直到下一个
/

如果模式不区分大小写,还可以添加
a-z

^([A-Za-z0-9$/#]+?)[/_].*

如果
/
#
只能在开头,您还可以选择匹配其中一个:

^([/#]?[A-Za-z0-9$]+)[/_].*

请参阅另一篇

请澄清,您所说的“起始字符”是什么意思?您应该用通俗的语言描述这些标准,以便将它们形式化为某些正则表达式。我的意思是,在这里应该“开始”什么,例如:
qwe\u asd
\u qwe/\u asd
\u qwe\u asd
。因为我看到你想跳过第一个反斜杠。也许使用通用子字符串更好<代码>substr(object_name,1,regexp_instr(object_name,[[uu/#]],2)-1),它不起作用吗?我也不能从
FHS_PRDCT_stt
GHS_INVTR_CD_DRY
分别获得计算
A$F
A1B
的算法。请澄清,“起始字符”是什么意思?您应该用通俗的语言描述这些标准,以便将它们形式化为某些正则表达式。我的意思是,在这里应该“开始”什么,例如:
qwe\u asd
\u qwe/\u asd
\u qwe\u asd
。因为我看到你想跳过第一个反斜杠。也许使用通用子字符串更好
substr(object_name,1,regexp_instr(object_name,[[uu/#]],2)-1)
,它不起作用吗?而且我无法从
FHS_PRDCT_stt
GHS_INVTR_CD_DRY
分别获得计算
A$F
A1B
的算法。非常感谢,到现在看起来还不错,让我做测试,如果有任何问题会回来,我有类似的情况,但在2ns的情况下,我试图捕捉最后的字符,你能检查吗?@rakesh这应该是一个不同的模式?(A-A-Za-Za-z0-z0-z0-10-9.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1-9美元#]+)在查询2中-regexp_substr(对象名称,“^[A-Za-z0-9$/#]+/([A-Za-z0-9$#]+])作为结尾,我没有得到预期的结果。谢谢,现在看起来还不错,让我做测试,如果有任何问题会回来,我有类似的情况,但在2ns的情况下,我试图捕捉最后的字符,你能检查吗?@rakesh这应该是一个不同的模式?(A-A-Za-Za-z0-z0-z0-10-9.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1-9美元#]+)在查询2中-regexp_substr(对象名称,“^[A-Za-z0-9$/#]+/([A-Za-z0-9$#]+])作为结尾,我没有得到预期的结果