我正在PostgreSQL(9.2)中尝试以下regex_replace语句

 # SELECT regexp_replace('_this._is_a_long_entry._of.nonsense_text', '\._|^_', '$','g');

目标:
将所有前跟句点的下划线字符替换为“$”。Am还将替换定位在位置1处的下划线;这将起作用。我想把两个匹配项都塞进一个语句中所有这些都是为了开发一种机制,将一些奇怪的文本推送到PostreSQL ltree结构中。
问题:
如何使上述第一次更换工作,而不骚扰周期字符?
我想看看结果是这样的:
$this.$is_a_long_entry.$of.nonsense_text
注意:还尝试了显式捕获下划线,但PG实现似乎忽略了这一点:
# SELECT regexp_replace('_this.is_long_entry._of.nonsense_text', '\.(_)|^_', '$','g');

最佳答案

SELECT regexp_replace('_this._is_a_long_entry._of.nonsense_text'
                     ,'(\.|^)_' -- capture the preceding char (none at start)
                     , '\1$'    -- use the captured char
                     ,'g');     -- globally

这是假设standard_conforming_strings = ON

关于regex - PostgreSQL regexp_replace麻烦先于,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12609054/

10-15 18:17
查看更多