Oracle Regexp问题[重复]

lnxxn5zx  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(96)

此问题已在此处有答案

Substr instr help needed in sql oracle(2个答案)
25天前关闭
我想从字符串模式中提取特定的字符串。使用正则表达式。但我发现它只返回null值。

  • 原始模式:<Information>Not readable</Information>
  • 我想从模式中提取的是:Not readable

下面是我使用的SQL:

regexp_substr(tridata,'[a-zA-Z ]*(?=</Information>)')

但它最终只返回null值。
我想知道这个查询有什么问题吗?或者我可以用哪种方式来提取字符串?

gcuhipw9

gcuhipw91#

Oracle在其regex引擎中不支持lookaround模式。您可以使用subexpression(在其他正则表达式引擎中通常称为捕获组)来提取特定模式:

select
    regexp_substr(
        '<Information>Not readable</Information>',
        '<Information>(.*?)</Information>',
        1, 1, '', 1)
from dual;

演示:https://livesql.oracle.com/apex/livesql/s/mk1rt44jwm58yev4rt8yr76s

wfveoks0

wfveoks02#

一个选项是使用REGEXP_REPLACE()函数,例如

SELECT REGEXP_REPLACE(tridata,'(.*<Information>)(.+)(</Information>.*)','\2') AS tridata_new
  FROM t

哪里

*\2返回匹配中的第2个捕获组
*(.+)greetings(+)查找 Information 标签之间的任何字符(.

nwwlzxa7

nwwlzxa73#

这是示例数据的一个选项

SQL> with test (col) as
  2    (select '<Information>Not readable</Information>' from dual)

查询

3  select xmlquery('*/text()' passing xmltype(col) returning content) as result
  4  from test;

RESULT
--------------------------------------------------------------------------------
Not readable

SQL>

相关问题