【发布时间】:2015-03-24 07:03:11
【问题描述】:
我正在尝试构建一个正则表达式模式,如果字符串以某些字符开头或包含非单词字符,它将返回 False,但是因为 VBA 的 RegExp 对象不支持后向查找,我发现这很难.唯一应该失败的单词字符前缀是 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][-_]。
【问题讨论】:
-
在表达式
" a1"中有2个或多个字符,前两个不是[Bb][-_],但是你想让.Test(" a1")返回False。按照您的定义,它应该是True。请解释我是否遗漏了什么? -
@omegastripes,字符串应该只有单词字符,这就是我在正则表达式模式中使用
\w的原因。 -
@femtoRgon,是的,我目前的解决方法涉及两个正则表达式。我希望找到一个单一的正则表达式解决方案,因为这将有助于代码的可扩展性。