Sql 特定字符串前所有字符的Oracle正则表达式
我正在处理一个子字符串正则表达式,需要从如下字符串中获取所有字符: 第一列,第二列,第三列 到目前为止,我已经:Sql 特定字符串前所有字符的Oracle正则表达式,sql,regex,oracle,Sql,Regex,Oracle,我正在处理一个子字符串正则表达式,需要从如下字符串中获取所有字符: 第一列,第二列,第三列 到目前为止,我已经: SELECT REGEXP_SUBSTR('FIRSTCOLUMN, SECONDCOLUMN, THIRDCOLUMN', '[^SECONDCOLUMN]+') AS SUBSTRING FROM DUAL; 这只返回“FIR”,但我需要结果是“FIRSTCOLUMN” 要更好地理解这个问题,另一个例子是: 当我使用'[^THIRDCOLUMN]+'模式而不是'[^
SELECT
REGEXP_SUBSTR('FIRSTCOLUMN, SECONDCOLUMN, THIRDCOLUMN', '[^SECONDCOLUMN]+') AS SUBSTRING
FROM DUAL;
这只返回“FIR”,但我需要结果是“FIRSTCOLUMN”
要更好地理解这个问题,另一个例子是:
当我使用'[^THIRDCOLUMN]+'
模式而不是'[^SECONDCOLUMN]+'
作为第一个示例时,我希望结果是“FIRSTCOLUMN,SECONDCOLUMN”
我知道这是可能的,但我在正则表达式方面做得不够好。您对正则表达式的基本概念理解有误。
[^…]
对类中的所有字符进行求反,因此它查找的字符不是S
、不是E
、不是C
,等等,这些字符正确地停在FIRST(请参见S
)
您可能需要一个懒惰的量词:
^.*?SECONDCOLUMN
或
分别。基本正则表达式的概念是错误的。
[^…]
对类中的所有字符进行求反,因此它查找的字符不是S
、不是E
、不是C
,等等,这些字符正确地停在FIRST(请参见S
)
您可能需要一个懒惰的量词:
^.*?SECONDCOLUMN
或
分别。从技术上讲,您需要一些语法糖来排除分隔字符串成为结果的一部分:要么用
replace(…,'secondcolumn')
将其包装起来,要么使用select regexp_substr('firstcolumn,secondcolumn,thirdcolumn','^(.*secondcolumn',1,1,null,1)从dual代码>附加参数表示要返回的匹配偏移量、事件、匹配参数、捕获组(仅限oracle 12c)。有关详细信息,请参阅oracle文档。如果有一个术语是双荷兰语,请考虑到一个网站解释RexEXE(例如)。但我想排除第一个示例的第二列字符串。因此,根据您的建议,我的代码变成:从DUAL中选择REGEXP_SUBSTR('FIRSTCOLUMN,SECONDCOLUMN,THIRDCOLUMN','^.*?SECONDCOLUMN')作为子字符串;但我的结果是:FIRSTCOLUMN,SECONDCOLUMN在我的例子中,我希望结果是:FIRSTCOLUMN,**这就是为什么我把“[^…]”从“FIRSTCOLUMN,**SECONDCOLUMN”中去掉“SECONDCOLUMN”。感谢您的建议。从技术上讲,您需要一些语法糖来排除定界字符串成为结果的一部分:要么用replace(…,'secondcolumn')
将其包装起来,要么使用select regexp_substr('firstcolumn,secondcolumn,thirdcolumn','^(.*secondcolumn',1,1,null,1)从dual代码>附加参数表示要返回的匹配偏移量、事件、匹配参数、捕获组(仅限oracle 12c)。有关详细信息,请参阅oracle文档。如果有一个术语是双荷兰语,请考虑到一个网站解释RexEXE(例如)。但我想排除第一个示例的第二列字符串。因此,根据您的建议,我的代码变成:从DUAL中选择REGEXP_SUBSTR('FIRSTCOLUMN,SECONDCOLUMN,THIRDCOLUMN','^.*?SECONDCOLUMN')作为子字符串;但我的结果是:FIRSTCOLUMN,SECONDCOLUMN在我的例子中,我希望结果是:FIRSTCOLUMN,**这就是为什么我把“[^…]”从“FIRSTCOLUMN,**SECONDCOLUMN”中去掉“SECONDCOLUMN”。谢谢你的建议。