oracle负面展望正则表达式不起作用

问题描述:

我有一个正则表达式,在Java中运行良好,但在Oracle中不起作用。oracle负面展望正则表达式不起作用

它寻找<a href="abcd" etc etc xyz >标签,其中xyz不在元素块中。

<a href="abcd" etc etc xyz > = not match 
<a href="abcd" etc etc > = match 

至REGx:(<[a][\s]+[^>]*[href]="[^>](?:(?!xyz).)*?)(>)

,但同样的事情在甲骨文

select I from atable 
where regexp_like (column, '(<[a][\s]+[^>]*[href]="[^>](?:(?!xyz).)*?)(>)') 

任何想法返回null?

让我澄清一下这个问题。其实我需要做到这一点。 比方说,我们有一个包含html语法数据的文本列'datacolumn'。我需要找到字符串

<a href="abcd" etc etc > 

,并替换成

<a href="abcd" etc etc xyz> 

如果已经有数据列串,我不应该插入另一XYZ,而只是把它。因此,可以说,如果列有数据这样

<a href="abcd" etc etc > asdf </a> etc etc <a href="efgh" etc etc xyz> 

那么我想这已经更换为

<a href="abcd" etc etc xyz> asdf </a> etc etc <a href="efgh" etc etc xyz> 

如果我不我提前结束了插入这样的双重XYZ使用负的样子

<a href="abcd" etc etc xyz> asdf </a> etc etc <a href="efgh" etc etc xyz xyz> 

我使用

REGEXP_REPLACE(datacolunm,'(<[a][\s]+[^>]*[href]="[^>](?:(?!xyz).)*?)(>)')','\1 xyz \3') 

但是由于不支持负向预测,或者我的reqex与oracle不兼容,所以我没有找到任何匹配。这在Java中工作。

+3

我不认为环视断言在Oracle支持。 – MElliott

没有关于与Oracle SQL中的reg表达式相关的负向预览功能的文档。

因此,一个使用解码声明再现负向前查找功能在这里:

SELECT 
    DECODE(
     REGEXP_SUBSTR(
      REGEXP_SUBSTR('<a href="abcd" etc etc >', '<a\s[^>]*href="abcd"[^>]*>'), 
      'xyz' 
     ), 
     'xyz', 
     NULL, 
     REGEXP_SUBSTR('<a href="abcd" etc etc >', '<a [^>]*href="abcd"[^>]*>') 
    ) 
FROM dual; 

说明

  1. 检查,看看我们是否有“一”与HREF元素=“abcd”属性第一个具有此功能:

    REGEXP_SUBSTR('<a href="abcd" etc etc >','<a\s[^>]*href="abcd"[^>]*>')

  2. 搜索此元素中是否存在字符串模式'xyz'。

    REGEXP_SUBSTR(calculation 1 ,'xyz')

  3. 解码

    if 'xyz' exists in element, then NULL otherwise element.