我尝试使用我在这个 post 中学到的东西, 现在我想编写一个 RegExp 来检查字符串是否包含数字和逗号。例如,“1,2,55,2”应该没问题,而“a,2,55,2”或“1.2,55,2”应该无法通过测试。我的代码:
Private Function testRegExp(str, pattern) As Boolean
Dim regEx As New RegExp
If pattern <> "" Then
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.pattern = pattern
End With
If regEx.Test(str) Then
testRegExp = True
Else
testRegExp = False
End If
Else
testRegExp = True
End If
End Function
Public Sub foo()
MsgBox testRegExp("2.d", "[0-9]+")
End Sub
MsgBox 产生 true 而不是 false。有什么问题吗?
最佳答案
您的正则表达式匹配部分字符串,它匹配所有 55,2
、a,2,55,2
、1.2,55,2 中的一个数字
输入字符串。
使用 anchor ^
和 $
执行完整字符串匹配,并在您说要匹配的字符类中添加逗号仅包含数字和逗号的字符串:
MsgBox testRegExp("2.d", "^[0-9,]*$")
^ ^ ^
我还建议使用 *
量词来匹配 0 次或多次出现,而不是 +
(1 次或多次出现 em>),但这需要您自己决定(是否允许空字符串匹配)。
这里是 the regex demo .请注意,它适用于 PCRE 正则表达式风格,但此正则表达式在 VBA 中的表现类似。
是的,如@Chaz建议,如果您不需要匹配字符串/行本身,另一种方法是匹配一个反字符类:
MsgBox testRegExp("2.d", "[^0-9,]")
这样,negated character class [^0-9,]
将匹配除逗号/数字之外的任何字符,使字符串无效。如果结果为 True
,则表示该字符串包含除数字和逗号之外的一些字符。
关于regex - VBA正则表达式检查特殊符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829889/