【问题标题】:Syntax error or access violation: 1139 Got error 'empty (sub)expression' from regexp语法错误或访问冲突:1139 从正则表达式得到错误“空(子)表达式”
【发布时间】:2019-06-25 06:20:34
【问题描述】:

我有这个正则表达式:

REGEXP '(^0+|0+)17198671(0+|$)$'

需要匹配这样的字符串

US00171986710
00171986710000000000000
001719867100000000

基本上我需要的是,如果字符串中有所有相同的数字替换零并以零结尾或什么都没有,我想匹配它们。我不明白为什么这个有效的正则表达式不适用于 MySQL

【问题讨论】:

  • (0+|) 只是0* 的一种写法。
  • 这相当于0+171986710*

标签: php mysql regex


【解决方案1】:

MySQL 正则表达式引擎不允许空选项,例如 ab(c|)a|(0+|$) 部分匹配输入字符串末尾的 1+ 个零或空字符串,这会导致错误。

注意(^0+|0+) 意味着一个或多个零不必出现在字符串的开头,因此您只需要

REGEXP '0+171986710*$'

详情

  • 0+ - 一个或多个0s
  • 17198671 - 文字子字符串
  • 0* - 零个或多个 0s
  • $ - 字符串结束。

【讨论】:

  • 写这篇文章的时候很累。感谢您为我简化它!
  • mysql 5+ 有这个问题,但 mysql 8 没有这个问题
  • @sg552 这是因为在 MySQL 8.x 中,正则表达式由 ICU regex engine 处理。
  • 感谢分享。你知道在 mysql 正则表达式中用什么替换 OR 吗?例如:AND CONCAT(",", user_group_ids, ",") REGEXP ",(35|43),"。注意|。提前致谢
  • @sg552 不明白你的意思,| 是一个交替运算符,在这两种情况下都可以很好地工作。
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多