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

rryofs0p  于 2023-04-11  发布在  Oracle
关注(0)|答案(1)|浏览(190)

我有一个查询,它从><\之间的列字符串中获取结果
查询写成

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

我理解第3个参数是开始位置,第4个是发生位置
但不确定第五和第六街
有人能解释一下这个查询是如何工作的吗?我看了几个博客,但是参数是不同的。
什么是([^>]+)\</Null(第五)和1(第六)

hk8txs48

hk8txs481#

您的正则表达式是错误的,将不匹配“results from a column string which is between > and <\”,因为它从不匹配初始>
如果你想在它们之间进行匹配,那么你需要包括前导>,然后你可以匹配尽可能少的字符(使用非贪婪模式[^<>]*?),直到你找到</(在描述中你声明\,在代码中你使用/。我假设你想要/,因为它在XML中使用):

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

至于:
什么是([^>]+)\</Null(第五)和1(第六)
正则表达式不正确,因为它将匹配一个或多个非>字符,直到找到第一个</子字符串。
这些参数在Oracle's REGEXP_SUBSTR documentation中有描述,它们是match_paramsubexp参数。文档中提供了完整的描述,但您的参数将使用默认的匹配参数并返回第一个捕获组的内容。

然而

如果你真的在解析XML(或XHTML),那么你最好使用一个合适的XML解析器,比如XMLTABLE

相关问题