如何替换此字符串中的所有值?

时间:2014-09-16 07:10:30

标签: sql regex oracle

我在表中的列中有一个字符串,其中包含不同的“大小”值。 E.g:

select 'Test size="7" size="14" text size="14" line="22" other size="10"  size="9" '
from dual;

如何在不替换字符串中的其他数字的情况下更改字符串中的所有大小值?

要替换的值对于所有实例都是相同的。例如。替换为8:

select 'Test size="8" size="8" text size="8" line="22" other size="8"  size="8" '
from dual;

我试过了,但它没有生效。有什么想法吗?:

select regexp_replace('Test size="7" size="14" text size="14" line="22" other size="10"  size="9" ', '/size="[0-9]+"/g', 'size="8"')
from dual

2 个答案:

答案 0 :(得分:4)

如果要将所有出现次数更改为相同的数字,则最简单的方法是将REGEXP_REPLACE()与适当的参数一起使用。第4个参数是要替换的字符串的出现; a 0表示所有出现。您刚刚添加的正则表达式无效的原因是您没有使用此参数。

with s as (
select 'Test size="7" size="14" text size="14" line="22" other size="10"  size="9" ' as str
  from dual
       )
select regexp_replace(str, 'size="\d+"', 'size="8"', 1, 0)
  from s

正则表达式查找字符串size=",后跟一个或多个数字\d+,后跟双引号"。然后它将该字符串替换为具有新数字的字符串。

答案 1 :(得分:3)

SQL> WITH DATA AS
  2    (SELECT 'Test size="7" size="14" text size="14" line="22" other size="10"  size="9" ' STR
  3    FROM DUAL
  4    )
  5  SELECT REGEXP_REPLACE(STR, 'size="[[:digit:]]+"','size="8"') STR
  6  FROM DATA
  7  /

STR
------------------------------------------------------------------------
Test size="8" size="8" text size="8" line="22" other size="8"  size="8"

SQL>