正则表达式MySQL,查找至少包含2个字母和2个数字的字符串

时间:2016-04-25 04:47:34

标签: mysql regex

我正在使用这个正则表达式REGEXP '^([a-z]){2,}([0-9]){2,}$' 查找包含超过2个字母和2个以上数字的字符串以及此REGEXP '^([0-9]){2,}([a-z]){2,}$'。 这仅涵盖以数字开头或以数字结尾的字符串。

我需要一个正则表达式来查找字母之间的数字。

MySQL version 5.1.73

4 个答案:

答案 0 :(得分:2)

这是最长的:

^[[:alpha:]]{2,}[[:digit:]]{2,}$|^[[:alpha:]]{1,}[[:digit:]]{1,}[[:alpha:]]{1,}[[:digit:]]{1,}$|^[[:digit:]]{1,}[[:alpha:]]{1,}[[:digit:]]{1,}[[:alpha:]]{1,}$|^[[:alpha:]]{1,}[[:digit:]]{2,}[[:alpha:]]{1,}$|^[[:digit:]]{1,}[[:alpha:]]{2,}[[:digit:]]{1,}$|^[[:digit:]]{2,}[[:alpha:]]{2,}$

mysql> select * from testtable;
+-------------+
| testcol     |
+-------------+
| 11aaa       |
| dd12        |
| s1s2        |
| 32423sdfsfd |
| sdfs12313   |
| saf234sfs   |
| asdf3sdf    |
+-------------+
7 rows in set (0.00 sec)

mysql> select * from testtable where testcol regexp '^[[:alpha:]]{2,}[[:digit:]]{2,}$|^[[:alpha:]]{1,}[[:digit:]]{1,}[[:alpha:]]{1,}[[:digit:]]{1,}$|^[[:digit:]]{1,}[[:alpha:]]{1,}[[:digit:]]{1,}[[:alpha:]]{1,}$|^[[:alpha:]]{1,}[[:digit:]]{2,}[[:alpha:]]{1,}$|^[[:digit:]]{1,}[[:alpha:]]{2,}[[:digit:]]{1,}$|^[[:digit:]]{2,}[[:alpha:]]{2,}$';
+-------------+
| testcol     |
+-------------+
| 11aaa       |
| dd12        |
| s1s2        |
| 32423sdfsfd |
| sdfs12313   |
| saf234sfs   |
+-------------+
6 rows in set (0.00 sec)

答案 1 :(得分:1)

假设您要测试列val,请尝试以下操作:

...
WHERE (val REGEXP '^[0-9a-z]*$')
     +(val REGEXP '[a-z].*[a-z]')
     +(val REGEXP '[0-9].*[0-9]')=3

此组合将测试val仅由组成的数字和字符(第一个正则表达式),包含至少两个字母' (第二个regexp)和至少两个数字(第三个正则表达式)。

答案 2 :(得分:1)

容易,但很长。使用此:

(\d.*\p{L}+.*|\p{L}.*\d+.*)(?1)+|\d{2,}\p{L}{2,}|\p{L}{2,}\d{2,}

演示: https://regex101.com/r/xT5rS6/6

说明:

  1. \d{2,}\p{L}{2,}|\p{L}{2,}\d{2,}:先处理确定的答案。如果它有两个或更多个数字后跟两个或更多个字母,或2个字母然后两个数字。
  2. (\d.*\p{L}+.*|\p{L}.*\d+.*)(?1)+:它可以只是一个数字/字母,然后是另一个,然后再一个数字/字母。然后我添加.*以忽略其他字符。 (?1)+ 递归正则表达式重复第一组模式。如果它只有1位数和1个字母,则至少需要重复一次。

答案 3 :(得分:0)

您可以使用零宽度正向前瞻和其他正常模式匹配:

^(?=.*[0-9]{2}).*[a-z]{2}