匹配最短的选项

时间:2017-02-06 22:14:32

标签: regex vba outlook-vba negative-lookahead negative-lookbehind

我正在尝试使用Outlook 2013 VBA来修改电子邮件正文,方法是拉出并替换<跨度>部分。但是,在多个跨度的情况下,我很难强制正则表达式只能获得一个跨度。

基于其他一些搜索,我正在尝试使用否定前瞻,但却失败了。

以下结果为:<span><span style = blah blah>Tags: test, test2</span>

期望的结果是:<span style = blah blah>Tags: test, test2</span>

测试模块代码:

Sub regextest()
Dim regex As New RegExp
Dim testStr As String

testStr = "a<span><span style=blah blah>Tags: test, test2</span></span>"

regex.pattern = "<span.*?(?:(span)).*?Tags:.*?</span>"

Set matches = regex.Execute(testStr)

For Each x In matches
    Debug.Print x 'Result: <span><span style = blah blah>Tags: test, test2</span>
Next
End Sub

谢谢!

1 个答案:

答案 0 :(得分:1)

Wiktor在上述评论中的回答可以用于我的目的:

<span\b[^<]*>[^<]*Tags:[^<]*</span>

只要没有&#39;&lt;&#39;在两个跨度结束之间。这不是一个先行,但它对我正在做的事情已经足够好了,非常简单。

感谢Wiktor!