删除所有特殊字符而不删除重音字符

Dig*_*ire 2 mysql

我需要清理字符串数据中包含所有类型奇怪字符的列。奇怪的字符几乎就是这些 []!@#$%.&*`~^-_{}:;<>/\|()

我只需要允许 [0-9]、[az],但由于包含一些西班牙语单词,所以还需要允许重音字符。

我一直在查看https://dev.mysql.com/doc/refman/8.0/en/regexp.html尝试设计一个可能适合此的正则表达式,但我的正则表达式 foo 很弱。

是否有办法清理这些字符,而不必单独查找和替换特殊字符,同时仍保留重音字符?

mus*_*cio 5

MySQL 8 具有应该可以工作的REGEXP_REPLACE 函数

如果您只需要保留字母数字字符,包括重音字符,那么这很简单

SELECT REGEXP_REPLACE(your_column, '[^[:alnum:]]+', ' ') ...
Run Code Online (Sandbox Code Playgroud)

用空格替换任何非字母数字。如果你只想删除列表中的字符,你可以使用类似的东西

SELECT REGEXP_REPLACE(your_column, '[\]\\[!@#$%.&*`~^_{}:;<>/\\|()-]+', ' ') ...
Run Code Online (Sandbox Code Playgroud)

请注意,在后一种情况下,您将需要转义“]”、“[”、“\”,可能还需要转义“-”(或将后者作为集合中的第一个或最后一个元素)。

dbfiddle 链接