如果街道没有跟随任何字母,我试图用街道替换街道。如果在街道之后存在非字母字符或字符串结尾,则允许替换。
我试图在Postgresql 9.5 regex_replace函数中实现这一点。我写的示例查询:
select regexp_replace('super streetcom','street(?!=[a-z])','st');
为什么我得到意想不到的输出以及实现预期结果的正确方法的任何帮助。
答案 0 :(得分:1)
这看起来像语法问题。尝试:?!
而不是?!=
。
e.g。
select regexp_replace('super street','street(?![a-z])','st');
将返回
super st
答案 1 :(得分:1)
lookahead construct看起来像(?!...)
,?!
之后的所有内容都是引擎尝试匹配的超前模式,一旦找到,匹配就会失败。
您似乎需要匹配整个单词street
。使用\y
,一个单词边界:
select regexp_replace('super streetcom street','\ystreet\y','st');
请参阅online demo
来自docs:
\y
仅匹配单词的开头或结尾