3

我有以下代码:

Dim results(1) As String
Dim RE As Object, REMatches As Object
Set RE = CreateObject("vbscript.regexp")

With RE
    .MultiLine = False
    .Global = True
    .IgnoreCase = True
    .Pattern = "(.*?)(\[(.*)\])?"
End With

Set REMatches = RE.Execute(str)

results(0) = REMatches(0).submatches(0)
results(1) = REMatches(0).submatches(2)

基本上,如果我传入一个字符串“Test”,我希望它返回一个数组,其中第一个元素是 Test,第二个元素是空白。

如果我传入一个字符串“Test [bar]”,第一个元素应该是“Test”,第二个元素应该是“bar”。

我似乎找不到我的正则表达式的任何问题。我究竟做错了什么?

4

1 回答 1

4

您需要将字符串锚点的开头和结尾添加到您的正则表达式中:

...
.Pattern = "^(.*?)(\[(.*)\])?$"
...

如果没有这些锚点,.*?则将始终匹配零个字符,并且由于您的组是可选的,因此它永远不会尝试回溯和匹配更多字符。

于 2012-12-03T01:01:13.107 回答