微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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="&lt;or&gt; 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?