regexp_replace () - соответствует, но не заменяется в конце строки - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь regexp_replace() все значения столбца, заканчивающиеся без "/", добавив "/".

. Я могу получить правильные значения с помощью этого оператора (шаблон был протестированс проверкой PCRE):

SELECT * FROM `table` WHERE `column` REGEXP("(?<=[^\/])$");

И несоответствующие с:

SELECT * FROM `table` WHERE `column` REGEXP("(?<![^\/])$");

Но когда утверждение:

UPDATE `table` SET `column` = REGEXP_REPLACE(`column`, "(?<=[^\/])$", "/");

Тогда, тамбез изменений, какое бы значение я ни указывал в третьем параметре:

Query OK, 0 rows affected (0.00 sec)
Rows matched: 1031  Changed: 0  Warnings: 0

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

пытается понять, почему это не работает

Когда я обосновываю проблему, вы просите REGEXP_REPLACE сделать две вещи:

  • Обнаружьте, что чего-то не хватает, и
  • Укажите местоположение в строке.

Ваше регулярное выражение говорит, что оно отсутствует, но я спрашиваю, указывает ли оно на конкретную подстроку (даже пустую) для замены. Легко указать на найденную подстроку (или подстроки). Трудно указать на пропущенную подстроку . И такой «указатель» необходим для замены.

Следовательно, подход Михала (даже если понадобилось некоторое регулярное выражение) является «правильным» способом решения проблемы.

0 голосов
/ 17 сентября 2018

Вы можете сделать это легко без регулярных выражений:

UPDATE `table` SET `column` = `column` + '/'
WHERE RIGHT(`column`, 1) <> '/'
...