我需要一個正則表達式來處理一個或多個小寫字母,一個或多個大寫字母,一個或多個數字以及正好一個特殊字符。正則表達式適用於一個或多個字母數字,並且正好有一個特殊字符
我寫了這個至今:
^(?=.*\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