【问题标题】:Would like to change to each end of word instead of end of string (matching) - MariaDB/MySQL + REGEXP_REPLACE想更改为每个单词的结尾而不是字符串的结尾(匹配) - MariaDB/MySQL + REGEXP_REPLACE
【发布时间】:2020-01-28 11:41:15
【问题描述】:

想要更改为每个单词的结尾而不是字符串的结尾(匹配)?

我现在有这个问题:

SELECT REGEXP_REPLACE(name,"(a|o|e|y|cy|dzy|rzy|owie|i|u|ów|owi|em)$",'') FROM `zp_poster`

查询示例:

SELECT REGEXP_REPLACE("Józefowi Piłsudski","(a|o|e|y|cy|dzy|rzy|owie|i|u|ów|owi|em)$",'')

预期结果:

Józef Piłsudsk

实际结果:

Józefowi Piłsudsk

【问题讨论】:

    标签: mysql regexp-replace


    【解决方案1】:

    您可以使用单词边界字符类。

    作为explained in the documentation,从版本 8.0.4 开始,MySQL 正则表达式依赖于 ICU 表示法(Unicode 的国际组件),其中单词边界表示为 \b。在早期版本中,使用了 Spencer 实现,边界表示为[[:<:]](单词前)和[[:>:]](单词后)。

    SELECT REGEXP_REPLACE(
        name,
        '(a|o|e|y|cy|dzy|rzy|owie|i|u|ów|owi|em)\\b',
        ''
    ) 
    FROM `zp_poster`
    

    Demo on DB Fiddle

    WITH t AS (
      SELECT 'Józefowi Piłsudski' name
      UNION ALL SELECT 'Piłsudski Józefowi'
    )
    SELECT 
        name,
        REGEXP_REPLACE(
          name,
          '(a|o|e|y|cy|dzy|rzy|owie|i|u|ów|owi|em)\\b',
          ''
        ) replaced
    FROM t;
    
    | name               | replaced       |
    | ------------------ | -------------- |
    | Józefowi Piłsudski | Józef Piłsudsk |
    | Piłsudski Józefowi | Piłsudsk Józef |
    

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2014-03-03
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多