我有一个查询,它从
>
和 <\
之间的列字符串中获取结果
查询写成
SELECT REGEXP_SUBSTR ('Column','([^>]+)\</', 1, 1,NULL,1) from table
我明白第三个参数是起始位置 第四是发生
但不确定5号和6号
任何人都可以解释这个查询是如何工作的。我看过一些博客,但参数不同。
什么是
([^>]+)\</
,Null
(第5)和1
(第6)
您的正则表达式是错误的,不会匹配“来自
>
和<\
之间的列字符串的结果”,因为它从不匹配初始>
.
如果你想在它们之间进行匹配,那么你需要包括前导
>
然后你可以匹配尽可能少的字符(使用非贪婪模式[^<>]*?
)直到找到</
(在描述中你陈述\
并在你使用/
的代码中。我假设你想要/
,因为它在XML中使用):
SELECT REGEXP_SUBSTR (
'Column',
'>([^<>]*?)</',
1,
1,
NULL,
1
)
FROM table_name
至于:
什么是
,([^>]+)\</
(第5)和Null
(第6)1
正则表达式不正确,因为它将匹配一个或多个非
>
字符,直到找到第一个</
子字符串。
参数在 Oracle 的
REGEXP_SUBSTR
文档 中描述,并且是 match_param
和 subexp
参数。文档中提供了完整的描述,但您的参数将使用默认匹配参数并返回第一个捕获组的内容。
如果您真的要解析 XML(或 XHTML),那么您最好使用合适的 XML 解析器,例如
XMLTABLE
.