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中工作。
答
没有关于与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;
说明
-
检查,看看我们是否有“一”与HREF元素=“abcd”属性第一个具有此功能:
REGEXP_SUBSTR('<a href="abcd" etc etc >','<a\s[^>]*href="abcd"[^>]*>')
-
搜索此元素中是否存在字符串模式'xyz'。
REGEXP_SUBSTR(calculation 1 ,'xyz')
-
解码
if 'xyz' exists in element, then NULL otherwise element.
我不认为环视断言在Oracle支持。 – MElliott