MySQL REGEXP不匹配字符串

时间:2012-09-14 17:18:55

标签: mysql regex select

我有一张消息表。我试图在表中找到具有符合特定格式的ID代码的消息。我在下面的正则表达式是为了在PHP中匹配这些值而编写的,但我想将它移到MySQL查询中。

正在寻找标识符代码的特定格式,如下所示:

[692370613-3CUWU]

代码格式一致:

  • 以硬括号[]
  • 开头和结尾
  • 里面有两个组件,
    • 首先是一个帐号,最少9位,但可能更高
    • 第二个组件是一个字母数字代码,5个字符,可以包含1-9,大写字母不包括“O”
  • 完整的代码可以出现在消息的任何地方

我的查询内容为:

SELECT * FROM messages 
WHERE 
    msgBody REGEXP '\\[(\d){9,}-([A-NP-Z1-9]){5}\\]' 
      OR 
    msgSubject REGEXP '\\[(\d){9,}-([A-NP-Z1-9]){5}\\]'

我在表格中创建了一个测试行,该测试行在msgBody字段中只有上面的示例值用于测试 - 但它不会返回任何结果。

我猜我在PHP样式regex与MySQL的转换中缺少一些东西。

非常感谢帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

而不是\d尝试使用[[:digit:]]

答案 1 :(得分:1)

SELECT * FROM messages 
WHERE 
  msgBody    REGEXP '\\[([0-9]){9,}-([A-NP-Z1-9]){5}\\]' 
             OR
  msgSubject REGEXP '\\[([0-9]){9,}-([A-NP-Z1-9]){5}\\]'