我也来一起玩这是为了问题2:
SELECT trim(regexp_replace(
'12 foo1 run 1457 ABC 1Foo 2456 bar 34',
'\s*\m\d+\M\s*',
' ',
'g'
));
Returns:
foo1 run ABC 1Foo bar
我更新了使用的答案约束表达式而不是括号表达式,因为手册告知:
下面描述的约束转义通常是更可取的;他们
不再标准,但更容易键入。
\s*
.. 零个或多个空白
\m
.. 单词的开头(与[[:<:]]
)
\d+
.. 1 位或更多数字
\M
.. 单词的结尾(与[[:>:]]
)
第4个参数'g'
需要替换“全局”,而不仅仅是第一次出现。
->sqlfiddle http://sqlfiddle.com/#!12/d41d8/408对于 v9.2
->sqlfiddle http://sqlfiddle.com/#!11/d41d8/29v8.4 不起作用
Why?
standard_conforming_strings http://www.postgresql.org/docs/current/interactive/runtime-config-compatible.html#GUC-STANDARD-CONFORMING-STRINGS。默认值在 v9.1 中发生了变化。
This在两个世界中都有效,可以说是“兼容模式”。但是上面现代版本的语法(结合standard_conforming_strings = on
)更干净。
SELECT trim(regexp_replace(
'12 foo1 run 1457 ABC 1Foo 2456 bar 34',
E'\\s*\\m\\d+\\M\\s*',
' ',
'g'
));
->sqlfiddle http://sqlfiddle.com/#!11/d41d8/30