我有一个查询,它从>和<\之间的列字符串中获取结果查询写成
>
<\
SELECT REGEXP_SUBSTR ('Column','([^>]+)\</', 1, 1,NULL,1) from table
我理解第3个参数是开始位置,第4个是发生位置但不确定第五和第六街有人能解释一下这个查询是如何工作的吗?我看了几个博客,但是参数是不同的。什么是([^>]+)\</,Null(第五)和1(第六)
([^>]+)\</
Null
1
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_param和subexp参数。文档中提供了完整的描述,但您的参数将使用默认的匹配参数并返回第一个捕获组的内容。
REGEXP_SUBSTR
match_param
subexp
如果你真的在解析XML(或XHTML),那么你最好使用一个合适的XML解析器,比如XMLTABLE。
XMLTABLE
1条答案
按热度按时间hk8txs481#
您的正则表达式是错误的,将不匹配“results from a column string which is between
>
and<\
”,因为它从不匹配初始>
。如果你想在它们之间进行匹配,那么你需要包括前导
>
,然后你可以匹配尽可能少的字符(使用非贪婪模式[^<>]*?
),直到你找到</
(在描述中你声明\
,在代码中你使用/
。我假设你想要/
,因为它在XML中使用):至于:
什么是
([^>]+)\</
,Null
(第五)和1
(第六)正则表达式不正确,因为它将匹配一个或多个非
>
字符,直到找到第一个</
子字符串。这些参数在Oracle's
REGEXP_SUBSTR
documentation中有描述,它们是match_param
和subexp
参数。文档中提供了完整的描述,但您的参数将使用默认的匹配参数并返回第一个捕获组的内容。然而
如果你真的在解析XML(或XHTML),那么你最好使用一个合适的XML解析器,比如
XMLTABLE
。