正则表达式 - 用 oracle 中的值替换字符串集

Posted

技术标签:

【中文标题】正则表达式 - 用 oracle 中的值替换字符串集【英文标题】:Regular Expression - Replace set of String with value in oracle 【发布时间】:2016-06-09 11:14:51 【问题描述】:

请任何人都可以给出一些想法,如何用 Oracle 中的值替换字符串集。例如:-

String Formula: (20+OFR)/(10-OGR) 需要替换 OFR=100 and OGR=50

字符串公式是动态变化的。

预期结果(20+OFR)/(10-OGR)= (20+100)/(10-50)

【问题讨论】:

replace 的迭代应用程序不应该足以胜任这种工作吗?在replace ( <formula_as_string>, 'OFR', <variable that holds OFR> ), 'OGR', <variable that holds OGR> ) 的脉络中?我看错了吗? 感谢Musakkhir,您能否提供一些想法来迭代此字符串。 这个公式是否来自列?替换的代码是否总是在结束括号之前?然后您会在 PL/SQL 代码中选择它、进行替换并使用公式吗?请使用编辑链接编辑您的帖子并更新标签,以提供有关环境和预期用途的更多信息。 【参考方案1】:

我不知道你想要达到什么目的。但是,如果要创建动态公式,则必须使用 select 语句:从 dual 中选择“您的公式”以获得结果。

这是一个示例代码:

declare
v_ofr NUMBER :=100 ;
v_ogr NUMBER := 50;
v_sql   VARCHAR2(500);
BEGIN

v_sql := 'select (20+ ' || v_ofr || ')/(10-' || v_ogr ||') from dual';

execute immediate v_sql;

DBMS_OUTPUT.PUT_LINE ( v_sql);

end;

【讨论】:

谢谢@Burhan,我没想到会这样,我必须创建一个 SP,其中 Formula 列有 (20+OFR)/(10-OGR) 可以根据用户选择动态更改无论他们在哪里放置像 OFR 这样的字符串,OGR 都会替换为相应的值。【参考方案2】:

要回答您的基本问题“如何在 oracle 中用值替换字符串集”,请查看对 regex in Oracle 的支持。例如,您可以通过以下方式实现您的示例:

select 
      REGEXP_REPLACE( REGEXP_REPLACE('(20+OFR)/(10-OGR)',
                     'OFR',
                     '100'), 'OGR',50)
      as "names after regexp"
      from DUAL;

除此之外,您可能需要更多编码,类似于上面 Burhan 显示的内容。希望对您有所帮助。

【讨论】:

以上是关于正则表达式 - 用 oracle 中的值替换字符串集的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 用正则表达式列表替换记录的子字符串

正则表达式笔记——用正则表达式处理文本

正则表达式搜索两个不同的字符串并替换为不同的值

c# 正则表达式提取()中的值

根据匹配用替换字符串替换字符串中的正则表达式模式

正则表达式替换问题