使用正则表达式计算小写



我正在尝试使用正则表达式计算字符串中的小写字符数。 我想我错过了一些显而易见的东西,但不知道是什么! 它适用于旧的经典 ASP 页面。

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

脚本返回 1 而不是 4。

你的捕获组错了,这就足够了:([a-z]).使用.*您可以捕获小写字符周围的所有内容。

我认为以下是您要做的。

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

为什么你不只使用[a-z],因为当你使用(.*[a-z].*)时,它会像一件而不是逐个字符地匹配你的所有输入?

你可以在这里检查区别:
[a-z] 正则表达式(.*[a-z].*)你的正则表达式

我还建议阅读:

  • 圆点(几乎(匹配任何字符

最新更新