1

我有一个消息表。我试图在表中查找具有符合特定格式的 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 风格的正则表达式与 MySQL 的转换中遗漏了一些东西。

非常感谢您的帮助。

谢谢!

4

2 回答 2

1

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

于 2012-09-14T17:26:40.950 回答
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}\\]'
于 2012-09-14T17:33:31.973 回答