我在postgreSQL中使用regex_replace并尝试去掉字符串中不是字母或数字的任何字符.但是,使用这个正则表达式:
select * from regexp_replace('blink-182', '[^a-zA-Z0-9]*$', '')
Run Code Online (Sandbox Code Playgroud)
返回'blink-182'.连字符没有被删除,并且没有像我期望的那样被替换为'''.
如何修改此正则表达式以替换hypen - 我已经测试了许多其他字符(!,.#)并且它们都被正确替换.
有任何想法吗?
Joe*_*oey 11
您目前只替换字符串末尾的一组非字母数字字符.我猜你的测试主要是形式的字符串,foobar!#因为要删除的字符位于字符串的末尾.
要替换字符串中每个出现的此类字符,请$从正则表达式中删除:
[^a-zA-Z0-9]+
Run Code Online (Sandbox Code Playgroud)
(我也将其*改为a +以防止每个角色之间的零长度替换.
如果你想保留空格,你需要将它添加到字符类:
[^a-zA-Z0-9 ]+
Run Code Online (Sandbox Code Playgroud)
或者可能
[^a-zA-Z0-9\s]+
Run Code Online (Sandbox Code Playgroud)
如果在一开始的正则表达式实际上纠正,你只想从字符串末尾除去非字母数字字符,但你也想删除连字符,减去一个字符串中间(同时保留其他非字母数字字符在字符串的中间),然后以下应该工作:
[^a-zA-Z0-9]+$|-
Run Code Online (Sandbox Code Playgroud)
maniek指出你需要添加一个参数,regexp_replace以便它将替换多次匹配:
regexp_replace('blink-182', '[^a-zA-Z0-9]+$|-', '', 'g')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4285 次 |
| 最近记录: |