如何解决Oracle正则表达式提取第一对<和>括号之间的字符串
我被分配了一个任务来解析一个字符串(本质上是 XML 格式),我需要提取字符串中第一个标签的名称
例如:字符串'<column><data-type>string</data-type>.............'
或'<filter><condition>....</condition>...............'
或
'......................'
字符串不断变化,但我只对第一个标签感兴趣,我想得到如下输出:
- 列,
- 过滤器,
- 查询
我尝试了 regexp_substr(string,'^<(.+)>',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="<or> this" />' FROM DUAL
输出:
| TAG_NAME | | :------------- | | column | | filter | | query | | has_attributes |
dbfiddle here
,您正在寻找边界之间的任何字符——包括'>'
。因此,只需排除终止字符:
select regexp_substr(string,'^<([^>]+)>',1,null,1)
from (select '<column><data-type>string</data-type>.............' as string from dual union all
select '<filter><condition>....</condition>...............' from dual
) x;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。