正则表达式匹配混合大小写的单词

时间:2012-11-16 04:48:58

标签: regex

我想写一个正则表达式,它将匹配由8个字符组成的任何单词,这些字符应该属于字符集:[A-Za-z0-9]。

但是,它们应该包含3个字符集中的至少一个字符(大写,小写和数字)。

这是我正在使用的正则表达式:

^[a-zA-Z0-9]{8}$

但是,这将匹配以下示例:

09823983
language
mainMenu

但我希望匹配以下字词:

uXk3mHy9

如何使用正则表达式执行此操作?

2 个答案:

答案 0 :(得分:5)

您可以在正则表达式前面使用三个look-ahead

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8}$

答案 1 :(得分:1)

不要在一个正则表达式中完成所有操作。正则表达式不是一个神奇的工具箱,所有解决方案都必须来自这个工具箱。

检查三种不同的条件,而不是将它们全部塞进一个正则表达式。在Perl中,这将是:

$ok = ( $s =~ /^[a-zA-Z0-9]{8}$/ && $s =~ /[a-z]/ && $s =~ /[A-Z]/ && $s =~ /[0-9]/ );

你的意图更清楚。