【问题标题】:Regex class subtraction equivalent in MySQLMySQL中的正则表达式类减法等效
【发布时间】:2014-02-12 00:09:16
【问题描述】:

我对 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): Got error 'invalid character range' from regexp */,我认为是因为 MySQL 的 REGEX 不支持类减法。我想我可以生成 [^1,3-9] 的明确否定组,但这似乎很棘手,我觉得我可能错过了一个更简单的答案。任何帮助将不胜感激。谢谢。

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

【问题讨论】:

    标签: regex regex-negation


    【解决方案1】:

    不知道是不是更简单,不过你可以用:

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

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

    【讨论】:

    • 非常感谢!查看一般策略的示例非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2016-04-23
    • 2010-09-07
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多