我在postgreSQL中使用regex_replace并尝试去除字符串中不是字母或数字的任何字符。但是,使用这个正则表达式:
select * from regexp_replace('blink-182', '[^a-zA-Z0-9]*$', '')
返回'blink-182'。连字符没有被删除,并且没有像我期望的那样被替换为“'”。
如何修改此正则表达式以替换hypen - 我已经测试过许多其他字符(!,。#)并且它们都被正确替换。
有什么想法吗?
答案 0 :(得分:11)
您目前只在字符串末尾替换的一组非字母数字字符。我猜您的测试主要是foobar!#
形式的字符串,因为要删除的字符位于字符串的末尾。
要替换字符串中每个出现的此类字符,请从正则表达式中删除$
:
[^a-zA-Z0-9]+
(我也将*
更改为+
,以防止每个字符之间的零长度替换。
如果你想保留空格,你需要将它添加到字符类:
[^a-zA-Z0-9 ]+
或可能
[^a-zA-Z0-9\s]+
如果开头的正则表达式实际上是正确的,你只想删除字符串末尾的非字母数字字符,但也想删除连字符中间的连字符一个字符串(同时保留字符串中间的其他非字母数字字符),那么以下内容应该有效:
[^a-zA-Z0-9]+$|-
maniek指出您需要向regexp_replace
添加一个参数,以便它将替换多次匹配:
regexp_replace('blink-182', '[^a-zA-Z0-9]+$|-', '', 'g')