我正在尝试构建一个正则表达式模式,如果字符串以某些字符开头或包含非单词字符,将返回False
,但由于VBA的RegExp
对象不支持lookbehind,我我发现这很困难。应该失败的唯一字符前缀是B_,B-,b_,b - 。
这是我的测试代码:
Sub testregex()
Dim re As New RegExp
re.pattern = "^[^Bb][^_-]\w+$"
Debug.Print re.Test("a24")
Debug.Print re.Test("a")
Debug.Print re.Test("B_")
Debug.Print re.Test(" a1")
End Sub
我想要回复:
True
True
False
False
但它会返回
True
False
False
True
问题是该模式会查找不在[Bb]
中的字符,后跟不在[-_]
中的字符,后跟一系列字符,但我想要的只是一个或更多单词字符,如果有2个或更多字符,那么前两个字符不是[Bb][-_]
。
答案 0 :(得分:3)
尝试匹配此表达式:
^([Bb][\-_]\w*)|(\w*[^\w]+\w*)$
...将匹配" B _"," b _"," B - "和" b - "或任何不是单词字符的东西。考虑成功匹配"失败"并且只允许非匹配有效。
答案 1 :(得分:0)
re.Pattern = "^(?:[^ Bb][^ _-]\w+|[^ Bb][^ _-]|[^ Bb])$"
答案 2 :(得分:0)
您可以通过
获得比赛regEx.Pattern = "^[^ bB][^_ -]*\w*$"
regEx.MultiLine = True
Debug.Print regEx.Test("a24")
Debug.Print regEx.Test("a")
Debug.Print regEx.Test("B_")
Debug.Print regEx.Test(" a1")
输出:
True
True
False
False