需要有关 REGEXP_SUBSTR() 函数的帮助

问题描述 投票:0回答:1

我有一个查询,它从

>
<\

之间的列字符串中获取结果

查询写成

SELECT REGEXP_SUBSTR ('Column','([^>]+)\</', 1, 1,NULL,1) from table

我明白第三个参数是起始位置 第四是发生

但不确定5号和6号

任何人都可以解释这个查询是如何工作的。我看过一些博客,但参数不同。

什么是

([^>]+)\</
Null
(第5)和
1
(第6)

sql oracle oracle12c
1个回答
2
投票

您的正则表达式是错误的,不会匹配“来自

>
<\
之间的列字符串的结果”,因为它从不匹配初始
>
.

如果你想在它们之间进行匹配,那么你需要包括前导

>
然后你可以匹配尽可能少的字符(使用非贪婪模式
[^<>]*?
)直到找到
</
(在描述中你陈述
\
并在你使用
/
的代码中。我假设你想要
/
,因为它在XML中使用):

SELECT REGEXP_SUBSTR (
         'Column',
         '>([^<>]*?)</',
         1,
         1,
         NULL,
         1
       )
FROM   table_name

至于:

什么是

([^>]+)\</
Null
(第5)和
1
(第6)

正则表达式不正确,因为它将匹配一个或多个非

>
字符,直到找到第一个
</
子字符串。

参数在 Oracle 的

REGEXP_SUBSTR
文档 中描述,并且是
match_param
subexp
参数。文档中提供了完整的描述,但您的参数将使用默认匹配参数并返回第一个捕获组的内容。


然而

如果您真的要解析 XML(或 XHTML),那么您最好使用合适的 XML 解析器,例如

XMLTABLE
.

© www.soinside.com 2019 - 2024. All rights reserved.