想更改为单词的每个结尾而不是字符串的结尾(匹配)- MariaDB/MySQL + REGEXP_REPLACE
Would like to change to each end of word instead of end of string (matching) - MariaDB/MySQL + REGEXP_REPLACE
想要更改为单词的每个结尾而不是字符串的结尾(匹配)?
我现在有这个查询:
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)$",'')
Expected result:
Józef Piłsudsk
Real result:
Józefowi Piłsudsk
您可以使用字边界字符class。
与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`
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 |
想要更改为单词的每个结尾而不是字符串的结尾(匹配)?
我现在有这个查询:
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)$",'')
Expected result:
Józef Piłsudsk
Real result:
Józefowi Piłsudsk
您可以使用字边界字符class。
与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`
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 |