正则表达式替换在字符串的中间

时间:2014-12-15 16:25:43

标签: regex postgresql

例如我有这个字符串:

"blah blach &deg blah °k as &deg "&deg""

我想要做的是在没有';'的情况下替换上面字符串中的& deg在& deg

之后

我在postgresql中使用以下内容

select regexp_replace('blah blach &deg blah °k as &deg "&deg"', '\&deg[^;]', '\&;' ,'g' );

但是我得到了这个输出

"blah blach &deg ;blah °k as &deg ;"&deg";"

我想要

"blah blach ° blah °k as ° "°""

1 个答案:

答案 0 :(得分:0)

在您的替换中,您将获取匹配的文字字符串(替换参数中的\&)并添加分号。您编写的正则表达式会抓取&deg以及与分号不匹配的下一个字符,该字符用于匹配,但不能替换/添加。

最简单的解决方案是使用组将&deg与下一个匹配字符分开。然后使用反向引用在正确的位置添加分号。

所以使用以下正则表达式:

(\&deg)([^;])

请注意&deg是第1组,下一个字符是第2组。您现在可以使用&deg

直接在\1;\2之后添加分号

示例

SELECT REGEXP_REPLACE('blah blach &deg blah °k as &deg "&deg"','(\&deg)([^;])','\1;\2', 'g')

<强>输出

blah blach &deg; blah &deg;k as &deg; "&deg;"