匹配MySQL中的Regex重复单词

时间:2014-07-07 04:36:20

标签: mysql sql regex

我遇到了查询问题。我使用mysql作为DB。我想使用REGEX来匹配我期望的结果和表是

table A

----------------------------------
|   ID  | Description            |
----------------------------------
|   1   |  new 2 new 2 new 2 new |
|   2   |   new 21 new 2 new     |
|   3   |   new 12th 2           |
|   4   |   2new 2new            |
|   5   |   new2 new 2new        |

我预期的结果 - 数字2只能显示两次
- 2之前/之后的字符必须是varchar(空白之后除外)

Table B
    ---------------------------------
    |   ID  | Description           |
    ---------------------------------
    |   4   |   2new 2new            |
    |   5   |   new2 new 2new        |

我到目前为止的查询:

SELECT * FROM a WHERE 
(description REGEXP '^[^2]*2[^2]*2[^2]*$')

click here for sqlfiddle demo

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

使用以下正则表达式获取第四个和第五个ID的描述。

SELECT * FROM a WHERE 
(description REGEXP '^2[^2]*2[^2]*|\w+2[^2]*2[^2]*$')

http://sqlfiddle.com/#!2/1284e/18

<强>解释

  • 将上述正则表达式分为两个,如2[^2]*2[^2]*作为一个部分,\w+2[^2]*2[^2]*作为另一个部分。在正则表达式^代表起点,$代表终点。
  • 2[^2]*2[^2]*

    • 2匹配数字2。
    • [^2]*匹配任何不是2次或更多次的字符。
    • 2匹配数字2。
    • [^2]*匹配任何不是2次或更多次的字符。
    • 这样可以获得第4张身份证明。
  • |逻辑OR运算符通常用于组合两个正则表达式,这意味着匹配此(之前)或之后(之后)。

  • \w+2[^2]*2[^2]*

    • \w+2匹配一个或多个单词字符,后跟数字2.在您的示例中,第5个ID满足此正则表达式。
    • [^2]*匹配任何不是2次或更多次的字符。
    • 2匹配数字2。
    • [^2]*匹配任何不是2次或更多次的字符。
    • 这样可以获得第5张身份证。