用于检查特殊符号的VBA regexp
我试着用我在这里学到的东西, 现在我想编写一个RegExp来检查字符串是否包含数字和逗号。例如,“1,2,55,2”应该可以,而“a,2,55,2”或“1.2,55,2”应该测试失败。我的代码:用于检查特殊符号的VBA regexp,regex,vba,testing,Regex,Vba,Testing,我试着用我在这里学到的东西, 现在我想编写一个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
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
私有函数testRegExp(str,pattern)作为布尔值
Dim regEx作为新的RegExp
如果模式为“”,则
用正则表达式
.Global=True
.MultiLine=True
.IgnoreCase=False
.模式
以
如果正则表达式测试(str),则
testRegExp=True
其他的
testRegExp=False
如果结束
其他的
testRegExp=True
如果结束
端函数
公共分区办事处()
MsgBox testRegExp(“2.d”,“[0-9]+”)
端接头
MsgBox生成true而不是false。有什么问题吗?您的正则表达式匹配一个部分字符串,它匹配所有
55,2
,a,2,55,2
,1.2,55,2
输入字符串中的一个数字
使用锚定^
和$
强制执行完整的字符串匹配,并在字符类中添加逗号,正如您所说,要匹配仅包含数字和逗号的字符串:
MsgBox testRegExp("2.d", "^[0-9,]*$")
^ ^ ^
我还建议使用*
量词匹配0个或多个匹配项,而不是+
(1个或多个匹配项),但这需要您自己决定(是否允许空字符串匹配)
这是。注意,它是用于PCRE正则表达式风格的,但该正则表达式在VBA中的性能类似
是的,正如建议的那样,如果不需要匹配字符串/行本身,则另一种方法是匹配反向字符类:
MsgBox testRegExp("2.d", "[^0-9,]")
这样,
[^0-9,]
将匹配除逗号/数字以外的任何字符,从而使字符串无效。如果结果为True
,则表示字符串包含除数字和逗号以外的字符。您可以使用有限的内置模式匹配:
function isOk(str) As boolean
for i = 1 To len(str)
if Mid$(str, i, 1) Like "[!0-9,]" then exit function
next
g = True and Len(str) > 0
end function
或者,使用非数字或逗号的任何字符的部分匹配的倒数,即:[^0-9,]。您需要反转返回值。@Chaz:我假设OP需要匹配字符串,但查看代码,很明显OP对匹配/无匹配结果感兴趣。
[0-9,]*$
可以在strng结尾匹配。因此,它将在dew%$%\9,
string中找到匹配项。你写了你需要匹配只包含数字和逗号的字符串,对吗^[0-9,]*$
是它的正确正则表达式。如果只想检查字符串是否还有其他内容,请使用[^0-9,]
进行检查。或者,在给定特定字符串的情况下,精确地获取所需的内容。正如您所解释的,这都是关于^和$。