我想用正則表達式計算字符串中小寫字符的數量。我想我錯過了一些非常明顯的東西,但無法弄清楚什麼!這是一個古老的經典ASP頁面。用正則表達式計算小寫
<%
Password="abcd123"
Set myRegExp = New RegExp
myRegExp.Pattern = "(.*[a-z].*)"
Response.Write myRegExp.Execute(Password).Count
%>
該腳本返回1,而不是4
我想用正則表達式計算字符串中小寫字符的數量。我想我錯過了一些非常明顯的東西,但無法弄清楚什麼!這是一個古老的經典ASP頁面。用正則表達式計算小寫
<%
Password="abcd123"
Set myRegExp = New RegExp
myRegExp.Pattern = "(.*[a-z].*)"
Response.Write myRegExp.Execute(Password).Count
%>
該腳本返回1,而不是4
你捕獲組是錯誤的,這就夠了:([a-z])
。使用.*
可以捕獲圍繞小寫字符的所有內容。
爲什麼不只是使用[a-z]
來代替,因爲當您使用(.*[a-z].*)
時,它會像所有輸入一樣匹配而不是逐個字符地匹配嗎?
您可以查看這裏的區別:
[a-z] regex
(.*[a-z].*)
Your regex
我也建議閱讀:
感謝這一點 - 我會看到你推薦:) –
我認爲下面是你想要什麼做。
Password="abcd123"
Set myRegExp = New RegExp
myRegExp.Global = True ' This is required to get all matches
myRegExp.Pattern = "[a-z]"
Response.Write myRegExp.Execute(Password).Count
但我對你有一些建議。
你可以讓你的規則貪心+
。這會減少週期。
您需要將.Global
設置爲True
以獲得所有匹配,而不僅僅是第一個。
使用此方法,您需要遍歷匹配集合(從myRegExp.Execute
返回)以找到正確的結果。
Password="abcd123fooBar"
Set myRegExp = New RegExp
myRegExp.Pattern = "[a-z]+"
myRegExp.Global = True
count = 0
For Each match In myRegExp.Execute(Password)
count = count + match.Length
Next
Response.Write count 'prints 9
而這裏的另一種方式是相同的。
這與所有非小寫字符匹配,並從結果字符串中刪除它們。然後您可以使用Len
函數獲得長度。
Password="abcd123fooBar"
Set myRegExp = New RegExp
myRegExp.Pattern = "[^a-z]+"
myRegExp.Global = True
count = Len(myRegExp.Replace(Password, ""))
Response.Write count 'prints 9
感謝這個文章 - 全球設置爲true是拼圖的最後一塊。 –
事實上,我並不需要循環,我只能使用: –
myRegExp.Execute(Password).Count –
謝謝你,我已經去掉了*從模式 –