Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式MySQL,查找至少包含2个字母和2个数字的字符串_Mysql_Regex - Fatal编程技术网

正则表达式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.查看。!