Хотелось бы изменить каждый конец слова вместо конца строки (соответствие) - MariaDB / MySQL + REGEXP_REPLACE - PullRequest
1 голос
/ 28 сентября 2019

Хотелось бы изменить каждый конец слова вместо конца строки (соответствие)?

У меня есть этот запрос сейчас:

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

1 Ответ

1 голос
/ 28 сентября 2019

Вы можете использовать границы слова класс символов.

Как указано в документации , начиная с версии 8.0.4. Регулярные выражения MySQL полагаются на нотацию ICU (InternationalКомпоненты для Unicode), где границы слова выражаются как \b.В более ранних версиях использовалась реализация Спенсера, и границы представлялись как [[:<:]] (перед словом) и [[:>:]] (после слова).

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

Демонстрация на 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...