领先的空间与正则表达式匹配

时间:2014-12-09 05:03:47

标签: regex vba

正则表达式的新手,我正在尝试跳过第一组括号[word1],并将任何剩余的文本与括号括号[...}

括起来

文字:[word1] This is a [word2]bk{not2} sentence [word3]bk{not3}

模式:[^\]]\[.*?\}

所以我想要的是匹配[word2]bk{not2}[word3]bk{not3},它有效,但我最终会在每场比赛中占据领先位置。已经玩了几天(并且做了很多阅读),但我显然仍然缺少一些东西。

2 个答案:

答案 0 :(得分:2)

\[[^} ]*}

试试这个。看看演示。

https://regex101.com/r/qJ8qW5/1

答案 1 :(得分:1)

模式中的

[^]]与领先空间相匹配。匹配任何没有]的字符。

例如,当文字为[word1] This is a X[word2]bk{not2}时, 模式[^\]]\[.*?\}匹配X[word2]bk{not2}

如果在[wordN}{notN}之间没有显示任何左括号,您可以使用:

\[[^\[}]*}

或者,您也可以将Submatches与捕获组一起使用。

Sub test()
    Dim objRE As Object
    Dim objMatch As Variant
    Dim objMatches As Object

    Dim strTest As String

    strTest = "[word1] This is a [word2]bk{not2} sentence [word3]bk{not3}"
    Set objRE = CreateObject("VBScript.RegExp")

    With objRE
        .Pattern = "[^\]](\[.*?\})"
        .Global = True
    End With

    Set objMatches = objRE.Execute(strTest)
    For Each objMatch In objMatches
        Debug.Print objMatch.Submatches(0)
    Next

    Set objMatch = Nothing
    Set objMatches = Nothing
    Set objRE = Nothing
End Sub

在此示例代码中,pattern具有用于分组的圆括号。