我遇到了查询问题。我使用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]*$')
任何人都可以帮我解决这个问题吗?
答案 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次或更多次的字符。 |
逻辑OR运算符通常用于组合两个正则表达式,这意味着匹配此(之前)或之后(之后)。
\w+2[^2]*2[^2]*
\w+2
匹配一个或多个单词字符,后跟数字2.在您的示例中,第5个ID满足此正则表达式。[^2]*
匹配任何不是2次或更多次的字符。2
匹配数字2。[^2]*
匹配任何不是2次或更多次的字符。