我需要一个正则表达式来处理一个或多个小写字母,一个或多个大写字母,一个或多个数字以及正好一个特殊字符。正则表达式适用于一个或多个字母数字,并且正好有一个特殊字符
我写了这个至今:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\@\#\^])[a-zA-Z0-9\@\#\^]*$
它得到不止一个特殊字符。 顺便说一下,我正在使用grep -P,并且我首先用http://regexr.com/测试了我的正则表达式。
我忘了提及角色应该以任何顺序。
我需要一个正则表达式来处理一个或多个小写字母,一个或多个大写字母,一个或多个数字以及正好一个特殊字符。正则表达式适用于一个或多个字母数字,并且正好有一个特殊字符
我写了这个至今:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\@\#\^])[a-zA-Z0-9\@\#\^]*$
它得到不止一个特殊字符。 顺便说一下,我正在使用grep -P,并且我首先用http://regexr.com/测试了我的正则表达式。
我忘了提及角色应该以任何顺序。
你的特殊字符分隔为不同的字符类,只有匹配了一次:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]*[\@\#\^][a-zA-Z0-9]*$
#NOTES: ^you dont need to do a look ahead for the special char since you explicitly match only 1
(?=...) ... ) signifies lookaheads: they each check that there is at least
one number, lowercase, and uppercase letter in the following match
[a-zA-Z0-9]* matches 0 or more of those for as long as possible
[\@\#\^] matches exactly one of these characters
[a-zA-Z0-9]* matches any of the remaining characters
这工作比原来的更好,因为它可以确保一个且只有一个,特殊字符匹配
@RNar,如果你可以用RegEx解释它的工作原理,那将是非常好的,而且非常有用。 – user3439894
@ user3439894检查编辑 –
@RNar,很好,谢谢! +1 – user3439894
猛砸正则表达式不要执行lookahead断言。 – rici
^我知道我使用grep -P,所以我可以使用lookaheads。 – ibz
然后不要说你正在使用bash。假设你正在使用'grep -P'并避免让人困惑。 – rici