MySQL中的正则表达式等级减法

时间:2014-02-12 00:09:17

标签: regex regex-negation

我对REGEX很新,所以如果这个问题太容易,我会道歉。我正在使用MySQL,并尝试创建一个比较结果,这将产生如下结果:

前四到六必须匹配,如果是数字 -

  • '414720'匹配'414720xxxx1234'

  • '414720'匹配'4147xxxxxx1234'

  • '414720'匹配'41472 *** abcd'

  • '414720'匹配'4147'

如果是其他数字,或者小于4

,则不匹配
  • '414720'与'414799xxxx1234'不匹配

  • '414720'与'414xxxxxxx1234'不匹配

我想也许我可以用像

这样的东西
SELECT '414720' REGEXP '4147[^0-9-[2]][^0-9-[0]]*'

但它返回/ * SQL错误(1139):从regexp * /得到错误'无效字符范围',我认为因为MySQL的REGEX不支持类减法。我想我可以生成[^ 1,3-9]的显式负片组,但这似乎很棘手,我觉得我可能错过了一个更简单的答案。任何帮助将不胜感激。感谢。

编辑:上面的x可以代替任何字符,或者可能不存在。添加了第二个匹配示例。

1 个答案:

答案 0 :(得分:1)

我不知道它是否更简单,但您可以使用:

4147($|\D|2($|\D|0)).*$

http://rubular.com/r/ehDtDaULZe所示。如果第五个字符不是数字,我不确定第六个字符有什么限制,如果有的话。