我正在尝试将这些正则表达式合并为一个。有谁知道这是否可能?
基本上我正在尝试检查字符串是否包含小写字母,大写字母和数字。
(.*[a-z]+.*)
(.*[A-Z]+.*)
(.*[0-9]+.*)
所以这些字符串都会传递
aA1
a1A
Aa1
A1a
1aA
1Aa
返回false的示例
aa1
AA1
a1a
AAa
a1
1a
1AA
1A
etc..
答案 0 :(得分:1)
是的,但它很讨厌。 (例子在Perl中)
my $re = qr{(?:
([a-z]+) |
([A-Z]+) |
([0-9]+)
)+}x;
必须定义所有$1
,$2
和$3
(因为0为假,所以我们不会将其删除)。
$string =~ $re;
print "Match" if defined $1 && defined $2 && defined $3;
为了每个人的利益,你最好将它保存在三个简单的正则表达式并编写一个子程序。
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;
}
答案 1 :(得分: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]
基本上,你有三种类型的角色 - U pper, L ower, D igit。这六种组合是
LUD|LDU|ULD|UDL|DLU|DUL
正如您所看到的,这很快变得复杂。如果你是密码检查,那么用宿主语言进行字符类计数是一个更好的选择。