【发布时间】:2014-03-31 06:38:53
【问题描述】:
我有一个在 Java 中运行良好但在 Oracle 中运行良好的正则表达式。
它寻找<a href="abcd" etc etc xyz > 标签,其中xyz 不在元素块中。
<a href="abcd" etc etc xyz > = not match
<a href="abcd" etc etc > = match
正则表达式:(<[a][\s]+[^>]*[href]="[^>](?:(?!xyz).)*?)(>)
但同样的事情在 Oracle 中返回 null
select I from atable
where regexp_like (column, '(<[a][\s]+[^>]*[href]="[^>](?:(?!xyz).)*?)(>)')
有什么想法吗?
让我进一步澄清这个问题。其实我需要做到这一点。 假设我们有一个文本列“datacolumn”,其中包含 html 语法数据。我需要找到字符串
<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 regex database oracle negative-lookahead