2017-07-07 78 views
0

我想用正則表達式計算字符串中小寫字符的數量。我想我錯過了一些非常明顯的東西,但無法弄清楚什麼!這是一個古老的經典ASP頁面。用正則表達式計算小寫

<% 
Password="abcd123" 
Set myRegExp = New RegExp 
myRegExp.Pattern = "(.*[a-z].*)" 
Response.Write myRegExp.Execute(Password).Count 
%> 

該腳本返回1,而不是4

回答

2

你捕獲組是錯誤的,這就夠了:([a-z])。使用.*可以捕獲圍繞小寫字符的所有內容。

+0

謝謝你,我已經去掉了*從模式 –

1

我認爲下面是你想要什麼做。

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 
+0

感謝這個文章 - 全球設置爲true是拼圖的最後一塊。 –

+0

事實上,我並不需要循環,我只能使用: –

+0

myRegExp.Execute(Password).Count –