【问题标题】:replacing regular expression not working in mysql and mariadb替换正则表达式在 mysql 和 mariadb 中不起作用
【发布时间】:2019-11-09 04:16:27
【问题描述】:

我想用正则表达式替换mysql中的字符串。为此,我正在使用 REGEXP_REPLACE 但它没有给我想要的结果。

我正在尝试将&breakUp=Mumbai;city,Puma;brand& 替换为&breakUp=Mumbai;city,Puma;brand,Delhi;State&,但正则表达式替换没有给我想要的结果。

我正在使用以下 sql 查询:

SELECT REGEXP_REPLACE('&breakUp=Mumbai;city,Puma;brand&','&breakUp=([\w;,]*)&','&breakUp=$1,Delhi;State&');

但它给了我以下结果:

&breakUp=Mumbai;city,Puma;brand&

相同的正则表达式在除 sql 之外的其他地方也能正常工作。 在 mysql 和 mariadb 中如何解决这个问题?

【问题讨论】:

  • 你确定替换的反向引用语法是$1吗?在替换中尝试\\1。和[^&]* 而不是[\w;,]*
  • 根据您的@WiktorStribiżew 的评论,请找到working demo
  • @Arulkumar 好的,那是 MySQL 8,$1 有效。好!

标签: mysql regex replace mariadb


【解决方案1】:

\w 无效。您可以使用[[:alnum:]][[:alpha:]] 代替\w

关于 MySQL 的解决方案:

SELECT REGEXP_REPLACE('&breakUp=Mumbai;city,Puma;brand&','&breakUp=([[[:alnum:]];,]*)&','&breakUp=$1,Delhi;State&');

demo on dbfiddle.uk

MariaDB 解决方案:

SELECT REGEXP_REPLACE('&breakUp=Mumbai;city,Puma;brand&','&breakUp=([[:alnum:];,]*)&','&breakUp=\\1,Delhi;State&');

demo on dbfiddle.uk

【讨论】:

  • 谢谢。如何在 MariaDB 中做同样的事情?
猜你喜欢
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多