正则表达式MySQL,查找至少包含2个字母和2个数字的字符串
我正在使用这个正则表达式正则表达式MySQL,查找至少包含2个字母和2个数字的字符串,mysql,regex,Mysql,Regex,我正在使用这个正则表达式REGEXP'^([a-z]){2,}([0-9]){2,}$' 要结合此REGEXP'^([0-9]){2,}([a-z]){2,}$'查找包含2个以上字母和2个以上数字的字符串,请执行以下操作。 这只包括以数字开头或以数字结尾的字符串 我需要一个正则表达式来查找字母之间的数字 MySQL版本5.1.73假设要测试列val,请尝试以下操作: ... WHERE (val REGEXP '^[0-9a-z]*$') +(val REGEXP '[a-z].*[a
REGEXP'^([a-z]){2,}([0-9]){2,}$'
要结合此REGEXP'^([0-9]){2,}([a-z]){2,}$'查找包含2个以上字母和2个以上数字的字符串,请执行以下操作
。
这只包括以数字开头或以数字结尾的字符串
我需要一个正则表达式来查找字母之间的数字
MySQL版本5.1.73
假设要测试列val
,请尝试以下操作:
...
WHERE (val REGEXP '^[0-9a-z]*$')
+(val REGEXP '[a-z].*[a-z]')
+(val REGEXP '[0-9].*[0-9]')=3
此组合将测试
val
是否仅由数字和字符(第一个regexp)组成,是否包含至少两个字母(第二个regexp)和至少两个数字(第三个regexp) 假设要测试列val
,请尝试以下操作:
...
WHERE (val REGEXP '^[0-9a-z]*$')
+(val REGEXP '[a-z].*[a-z]')
+(val REGEXP '[0-9].*[0-9]')=3
此组合将测试
val
是否仅由数字和字符(第一个regexp)组成,是否包含至少两个字母(第二个regexp)和至少两个数字(第三个regexp) 您可以对一个使用零宽度正向前瞻,对另一个使用正常模式匹配:
^(?=.*[0-9]{2}).*[a-z]{2}
您可以对一个使用零宽度正向前瞻,对另一个使用法线模式匹配:
^(?=.*[0-9]{2}).*[a-z]{2}
很容易,但是很长。使用以下命令:
(\d.*\p{L}+.*|\p{L}.*\d+.*)(?1)+|\d{2,}\p{L}{2,}|\p{L}{2,}\d{2,}
演示:
说明:
\d{2,}\p{L}{2,}\p{L}{2,}\d{2,}
:首先处理确定的答案。如果它有两个或两个以上的数字后跟两个或两个以上的字母,或两个字母后跟两个数字(\d.*\p{L}++.*\p{L}.*\d++.(?1)+
:它可以是一个数字/字母,然后紧跟另一个,然后再紧跟一个数字/字母。然后我添加*
以忽略其他字符(?1)+
是重复group one模式的递归正则表达式。如果它只有一个数字和一个字母,则至少需要重复一次很容易,但是很长。使用以下命令:
(\d.*\p{L}+.*|\p{L}.*\d+.*)(?1)+|\d{2,}\p{L}{2,}|\p{L}{2,}\d{2,}
演示:
说明:
\d{2,}\p{L}{2,}\p{L}{2,}\d{2,}
:首先处理确定的答案。如果它有两个或两个以上的数字后跟两个或两个以上的字母,或两个字母后跟两个数字(\d.*\p{L}++.*\p{L}.*\d++.(?1)+
:它可以是一个数字/字母,然后紧跟另一个,然后再紧跟一个数字/字母。然后我添加*
以忽略其他字符(?1)+
是重复group one模式的递归正则表达式。如果它只有一个数字和一个字母,则至少需要重复一次^[[: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)
这是最长的:
^[[: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)
我没有得到结果cars10:/I忽略了
REGEXP
返回0或1,因此更容易将所有三个结果以数字相加。请看我的编辑。谢谢你!就像一个符咒:)我没有得到结果cars10:/I忽略了REGEXP
返回0或1,因此只需将所有三个结果以数字相加就更容易了。请看我的编辑。谢谢你!工作起来很有魅力:)我从regexp得到#1139-得到错误“重复运算符操作数无效”
我从regexp得到#1139-得到错误“重复运算符操作数无效”
谢谢阿米娜,但我从regexp得到错误“重复运算符操作数无效”。我知道这在PHP中有效,但在MySQL中无效:/此外,这不会将'1aaa1'
或'a111a'
测试为阳性。@cars10,我已经将答案更新为匹配1aaa1
或a111a
是的,就是这样!它起作用了!但在我的脑海里,“简单”是另一回事,我的头已经在冒烟了;-)此操作失败,字符串为“tes1t ma2tch”。我已经在您的regex101中添加了一些单元测试:谢谢Aminah,但是我从regexp中得到了错误“repeation operator operand invalid”。我知道这在PHP中有效,但在MySQL中无效:/此外,这不会将'1aaa1'
或'a111a'
测试为阳性。@cars10,我已经将答案更新为匹配1aaa1
或a111a
是的,就是这样!它起作用了!但在我的脑海里,“简单”是另一回事,我的头已经在冒烟了;-)此操作失败,字符串为“tes1t ma2tch”。我已经在您的regex101中添加了一些单元测试:我认为我们应该避免使用?
我认为我们应该避免使用?
谢谢您在@PanosK中查看它。!感谢您在@PanosK.查看。!