我在 postgreSQL 中使用 regex_replace 并尝试删除字符串中不是字母或数字的任何字符。但是,使用这个正则表达式:
select * from regexp_replace('blink-182', '[^a-zA-Z0-9]*$', '')
返回“眨眼 182”。正如我所料,连字符没有被删除并替换为空('')。
如何修改此正则表达式以替换连字符 - 我已经用许多其他字符(!,。#)进行了测试,它们都被正确替换了。
有任何想法吗?
我在 postgreSQL 中使用 regex_replace 并尝试删除字符串中不是字母或数字的任何字符。但是,使用这个正则表达式:
select * from regexp_replace('blink-182', '[^a-zA-Z0-9]*$', '')
返回“眨眼 182”。正如我所料,连字符没有被删除并替换为空('')。
如何修改此正则表达式以替换连字符 - 我已经用许多其他字符(!,。#)进行了测试,它们都被正确替换了。
有任何想法吗?
您当前仅替换字符串末尾的一连串非字母数字字符。我猜您的测试主要是foobar!#
有效的形式的字符串,因为要删除的字符位于字符串的末尾。
要替换字符串中每个出现的此类字符,请$
从正则表达式中删除:
[^a-zA-Z0-9]+
(我也将其更改*
为 a+
以防止在每个字符之间进行零长度替换。
如果您还想保留空格,则需要将其添加到字符类中:
[^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')