【问题标题】:Repeat word with delete and space in MySQL query在 MySQL 查询中使用删除和空格重复单词
【发布时间】:2014-12-23 05:48:08
【问题描述】:

不确定这在 MySQL 中是否可行,但我有一列的企业名称如下:

AT&T 商店
O'Reilly 的汽车配件
汉堡王

我使用 MySQL 查询将其导入 Sphinx Search。我有 MariaDB,所以有一个 REGEXP_REPLACE(col, regexp, replace) 函数,但我无法弄清楚其余的函数。

我需要的是重复用非字母数字字符替换的单词,并替换为空格。所以上面的例子会变成:

ATT AT T 商店
OReillys O Reilly 的汽车配件
汉堡王

这在 MySQL 查询中是否可行?谢谢!

【问题讨论】:

    标签: mysql regex mariadb


    【解决方案1】:

    这可以一次完成,但不能通过 SQL 原始正则表达式完成。

    我不知道 REGEXP_REPLACE,也不知道现代 SQL。

    通常由三个正则表达式完成。

    伪代码:

    $column_val = "O'Reilly's Auto Parts";
    $new_column_val = Replace_Globally(  
                         $column_val,
                         '\b\w+[[:punct:]](?:[[:punct:]]*\w)+\b',  
                         function( $match ) {
                                $val = $match.value;
                                $text1 = Replace_Globally( $val, '[[:punct:]]+', "" ); 
                                $text2 = Replace_Globally( $val, '[[:punct:]]+', " " ); 
                                return $text1 + " " + $text2;
                          }
                      );
    

    所以,这可能看起来不像 sql 可以做的事情,所以你可能需要发挥创造力。

    【讨论】:

    • 谢谢!我会试一试,看看我能做什么。
    【解决方案2】:

    REGEXP_REPLACE 仅在 MariaDB 中,MySQL 没有。

    select regexp_replace(regexp_replace(
    "AT&T Store
    O'Reilly's Auto Parts
    Burger King",
    '([[:alnum:]]+)[[:punct:]]+([[:alnum:]]+)[[:punct:]]+([[:alnum:]]+)',
    '\\1\\2\\3 \\1 \\2 \\3'),
    '([[:alnum:]]+)[[:punct:]]+([[:alnum:]]+)',
    '\\1\\2 \\1 \\2')
    

    【讨论】:

    • 这非常有效。只需用列替换列出的名称,它在所有方面都表现良好。还必须升级到 MariaDB 10,因为 5.5 不支持 regexp_replace。谢谢!
    • 另外,为了在 PHP 中插入,我可以使用: preg_replace('~([[:alnum:]]+)[[:punct:]]+([[: alnum:]]+)~','\\1\\2 \\1 \\2', preg_replace('~([[:alnum:]]+)[[:punct:]]+([[: alnum:]]+)[[:punct:]]+([[:alnum:]]+)~','\\1\\2\\3 \\1 \\2 \\3', $VariableOrString ));
    猜你喜欢
    • 2022-01-13
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2011-09-23
    • 2011-03-23
    • 1970-01-01
    • 2015-11-08
    相关资源
    最近更新 更多