Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 特定字符串前所有字符的Oracle正则表达式_Sql_Regex_Oracle - Fatal编程技术网

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”。谢谢你的建议。