2012-09-14 53 views
1

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

它正在寻找的识别符代码的特定格式,看起来像这样:

[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风格的正则表达式与MySQL的转换。

非常感谢帮助。

谢谢!

回答

1

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

+0

是做到了 - 谢谢! –

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}\\]'