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
Regex 将正则表达式语句组合在一起_Regex - Fatal编程技术网

Regex 将正则表达式语句组合在一起

Regex 将正则表达式语句组合在一起,regex,Regex,我正在尝试将这些正则表达式组合成一个正则表达式。有人知道这是否可能吗 基本上,我试图检查字符串是否包含小写字母、大写字母和数字 (.*[a-z]+.*) (.*[A-Z]+.*) (.*[0-9]+.*) 所以这些字符串都会通过 aA1 a1A Aa1 A1a 1aA 1Aa 返回false的示例 aa1 AA1 a1a AAa a1 1a 1AA 1A etc.. 是的,但是很恶心。(示例为Perl语言) 必须定义所有$1、$2和$3(由于0为false,因此true不会将其删除) 为了

我正在尝试将这些正则表达式组合成一个正则表达式。有人知道这是否可能吗

基本上,我试图检查字符串是否包含小写字母、大写字母和数字

(.*[a-z]+.*)
(.*[A-Z]+.*)
(.*[0-9]+.*)
所以这些字符串都会通过

aA1
a1A
Aa1
A1a
1aA
1Aa
返回false的示例

aa1
AA1
a1a
AAa
a1
1a
1AA
1A
etc..
是的,但是很恶心。(示例为Perl语言)

必须定义所有
$1
$2
$3
(由于0为false,因此true不会将其删除)

为了每个人的利益,最好将它保留在三个简单的正则表达式上,并编写一个子程序

sub is_valid_string {
    my $str = shift;

    return 0 unless $str =~ /[a-z]/;
    return 0 unless $str =~ /[A-Z]/;
    return 0 unless $str =~ /[0-9]/;

    return 1;
}

一种非常简单的方法是列举所有六种组合:

[a-z][A-Z][0-9]|[a-z][0-9][A-Z]|[A-Z][a-z][0-9]|[A-Z][0-9][a-z]|[0-9][a-z][A-Z]|[0-9][A-Z][a-z]
基本上,你有三种类型的角色-Upper、Lower和Digit。这六种组合是

LUD|LDU|ULD|UDL|DLU|DUL

如你所见,这很快就会变得复杂。如果你想用它来检查密码,用宿主语言进行字符类计数是更好的选择。

和“a1”会失败吗?另外,您是否正在检查密码复杂性?不要这样做。@Schwern是的,它应该返回false。。。为什么不呢?密码破解已经变得非常复杂,密码中有数字意味着质量的日子已经一去不复返了。要么使用高质量的密码检查器,要么就不用麻烦了。你只会增加复杂性,让编写好密码的人感到恼火。继续询问更多细节。@Schwern谢谢您提供的信息!我会进一步调查的!对于“非常简单”的某些复杂值;)@Schwern我的意思是,这很简单:你所做的就是列出所有600个选项:-)
[a-z][A-Z][0-9]|[a-z][0-9][A-Z]|[A-Z][a-z][0-9]|[A-Z][0-9][a-z]|[0-9][a-z][A-Z]|[0-9][A-Z][a-z]
LUD|LDU|ULD|UDL|DLU|DUL