暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle regexp_replace行为

askTom 2018-03-06
399

问题描述

我试图用regexp_replace消除字符串的某些部分,并尝试大量的正则表达式,但我无法获得所需的结果。我正在使用类似于以下内容的代码:

声明
W _ 次数;
w_source varchar2(2000);
w_target varchar2(2000);
w_regexp varchar2(100);
开始
w_regexp := '(<脚本>。)?';
w_source := ' 一些普通文本。 更普通的文本。 ';
w_times := regexp_count(w_source,w_regexp);
dbms_output.put_line('找到:' | | w_times | | '时间模式' | | w_regexp);
w_target := w_source;
我在1 ..w_times循环
w_target := regexp_replace(w_target,w_regexp,'',1,1,'n');
dbms_output.put_line('目标:' | | w_target);
dbms_output.put_line('来源:' | | W _ 来源);
结束循环;
结束;

当我用regexp_count运行它 (我也在sqlLive上证明它) 时,我有一个3个模式计数的答案,但是即使在for句子的第一次运行中,regexp_replace也会返回我一个空白行,因此,regexp_replace将在第一个 标记之间获取所有内容。

每次如何仅消除 并保留所有其他文本?

如果我使用: “w_target := regexp_replace(w_target,w_regexp,'',1,0,'n'); ”,没有for句子,也会发生同样的情况。

专家解答

<脚本>。

有效地说:

“找到

关键是 “尽可能”,最终最终会出现在源文本的最后部分

SQL> with src as
  2   ( select ' Some normal text.  More normal text. @' s from dual )
  3  select  regexp_replace(s,'()?')
  4  from src;

R
-
@
复制


你想把你的贪婪指示器移动到 “尽可能” 扫描发生的地方,即 “”。因此

SQL> with src as
  2   ( select ' Some normal text.  More normal text. @' s from dual )
  3  select  regexp_replace(s,'()')
  4  from src;

REGEXP_REPLACE(S,'(
---------------------------------------
 Some normal text.  More normal text. @
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论