regex 如何匹配其中一个可能的选项?

s4n0splo  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(97)

我使用VBA代码(使用Microsoft VBScript正则表达式5.5库)将邮件中的纯文本ID从我们的错误跟踪系统替换为超链接。
消息可以包含类似“Bug 1234567”或“Issue 1234567”的字符串。
我使用下面的代码来匹配第一个选项:

Set re = CreateObject("vbscript.regexp")
re.Pattern = "Bug [0-9][0-9][0-9][0-9][0-9][0-9][0-9]"

For Each match In re.Execute(body)
    MsgBox match.Value
Next

我想同时匹配两个选项。
下列模式不起作用。只有一个选项仍然匹配(被替换)。

re.Pattern = "(Bug|Issue) [0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
re.Pattern = "(Bug [0-9][0-9][0-9][0-9][0-9][0-9][0-9])|(Issue [0-9][0-9][0-9][0-9][0-9][0-9][0-9])"
hgc7kmma

hgc7kmma1#

您的模式很好,但可以通过明确声明它应该包含[0-9] 7次来简化,即:

(Bug|Issue) [0-9]{7}

缺少的是Global属性,根据this site,该属性指定正则表达式应该匹配所有匹配项,而不仅仅是第一个匹配项。因此,整个代码变成:

Set re = CreateObject("vbscript.regexp")
re.Global = True
re.Pattern = "(Bug|Issue) [0-9]{7}"

For Each match In re.Execute(body)
    MsgBox match.Value
Next

相关问题