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 で 2 番目の要素が空白の配列が返されます。

文字列「Test [bar]」を渡す場合、最初の要素は「Test」、2 番目の要素は「bar」にする必要があります。

正規表現に問題がないようです。私は何を間違っていますか?

4

1 に答える 1

4

文字列アンカーの先頭と末尾を正規表現に追加する必要があります。

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

これらのアンカーがないと、.*?は常に 0 文字と一致し、グループはオプションであるため、バックトラックしてさらに一致しようとすることはありません。

于 2012-12-03T01:01:13.107 に答える