regex 替换字符串中的重复特殊字符- MySQL

ozxc1zmp  于 12个月前  发布在  Mysql
关注(0)|答案(3)|浏览(120)

如何用单个字符替换n/重复字符?所有特殊字符!@#$%^&*()_-+=[]{};:'",<.>/?\|~我需要它们只出现一次。我开始嵌入“replace“s,但这失控了,需要我对每个字符进行多次替换。

字符串示例:

  • 太棒了!
  • 看看这个
  • $钱$$
  • ,来吧
    期望输出:
  • 太棒了!
  • “看这个!”
  • $钱$
  • 来吧
twh00eeo

twh00eeo1#

根据上面的建议,我想出了这个:

SELECT REGEXP_REPLACE('''''''look at this!!!!!''''', '([$!&*_;:@#+\'=%^,<.>/?|~])\\1+', '$1');

字符串
如前所述,它捕获第一组中的每个事件并替换为单个字符。在v8.0上测试,似乎适用于您的示例。

mklgxw1f

mklgxw1f2#

让我们尝试以下操作:

([&*()_\-+={}[\];:!@#$%^'",<.>\/?\\|~])+$1

字符串

**PS:**首先在SQL中使用适当的查询来检索所需的数据,查询的标准格式如下:

SELECT <col-name> FROM <table>


然后你必须更新它并向数据库发送更新查询。
有关更多信息,请参阅以下链接:

这些问题可能有不止一个解决办法。

tvz2xvvm

tvz2xvvm3#

我认为这样更好,更具体:

CREATE FUNCTION `remove_duplicate_chars` (input_text Text, char_to_replace VARCHAR(1)) RETURNS Text
BEGIN
    DECLARE result_text Text;
    DECLARE current_char VARCHAR(1);
    DECLARE prev_char VARCHAR(1) DEFAULT '';
    DECLARE i INT DEFAULT 1;

    SET result_text = '';

    WHILE i <= LENGTH(input_text) DO
        SET current_char = SUBSTRING(input_text, i, 1);

        IF current_char != prev_char OR current_char != char_to_replace THEN
            SET result_text = CONCAT(result_text, current_char);
        END IF;

        SET prev_char = current_char;
        SET i = i + 1;
    END WHILE;

    RETURN result_text;
END $$

字符串
使用源代码如下:

SELECT replace_consecutive_chars('aabbcdddaaee', 'd') AS result;


结果=> aabbcdaee

相关问题