用正则表达式计算小写
我想用正则表达式计算字符串中小写字符的数量。我想我错过了一些非常明显的东西,但无法弄清楚什么!这是一个古老的经典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 –
谢谢你,我已经去掉了*从模式 –