Oracle 正则表达式,用于提取第一对<和>括号之间的字符串



我被分配了一项任务来解析字符串(本质上是XML格式(,我需要提取字符串中第一个标签的名称

例如:字符串'<column><data-type>string</data-type>.............''<filter><condition>....</condition>...............'

'…………..'

字符串不断变化,但我只对第一个标签感兴趣,我想得到这样的输出:

  • 滤波器
  • 查询

我尝试过regexp_substr(string,'^<(.+)>',1,1,null,1)和一些类似的变体,但它们似乎并不一致。

请帮忙。

如果您有XML数据,则使用适当的XML解析器:

SELECT XMLQUERY( '/*/name()' PASSING XMLTYPE(value) RETURNING CONTENT ) AS tag_name
FROM   table_name

样本数据:

CREATE TABLE table_name ( value CLOB );
INSERT INTO table_name ( value )
SELECT '<column><data-type>string</data-type></column>' FROM DUAL UNION ALL
SELECT '<filter><condition>....</condition></filter>' FROM DUAL UNION ALL
SELECT '<query />' FROM DUAL UNION ALL
SELECT '<has_attributes attr1="do not return this" attr2="&lt;or&gt; this" />' FROM DUAL

输出:

|TAG_NAME||:---------------||柱||过滤器||查询||has_attributes|

db<gt;小提琴这里

您正在查找边界之间的任何字符,其中包括'>'。因此,只需排除终止字符:

select regexp_substr(string,'^<([^>]+)>',1,1,null,1)
from (select '<column><data-type>string</data-type>.............' as string from dual union all
select '<filter><condition>....</condition>...............' from dual
) x;

最新更新