使用regexp_replace如何用异常替换字符串

时间:2018-06-13 16:54:37

标签: postgresql regexp-replace

' sub.*'外,如何替换' substation.*'的所有匹配项?

regexp_replace("CleanString",' sub.*',' ', 'ig')

我尝试过使用各种分组组合()但仍然没有得到它。

使用postgres regexp_replace()

1 个答案:

答案 0 :(得分:0)

正则表达式通常只匹配那里的东西,而不是那些不存在的东西 - 你不能简单地放一个" if-then-else"在那里。

然而,Postgres的正则表达式支持,the manual page for which is here包括" lookahead" " lookbehind"表达式。

在您的情况下,您需要*否定前瞻":

  

(?!re)负向前瞻匹配任何没有子串匹配重新开始的点(仅限ARE)

在任何时候注意短语"重要的是#34; - lookarounds是"零宽度",所以(?!station)并不意味着"除了station"之外的其他东西,它意味着"一个位置在station未来的字符串中#34;。

因此,您可以构建您的查询:

' sub(?!station).*'

这将匹配" sub"," foo sub"," subbar"或" foo subbar",但不是"变电站"," foo变电站","变电站",或" foo变电站"。由于(?!station)为零宽度,而下一个标记为.*,因此在"之后无需进行任何操作。子"

如果你想在" sub"之后有某事,你可以写一下:

' sub(?!station).+'

.+表示"至少有一个",所以它仍会匹配" subbar"和" foo subbar",但不再匹配"子"或者" foo sub"。