Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Outlook 2007中的正则表达式规则?_Regex_Vba_Vbscript_Outlook_Outlook 2007 - Fatal编程技术网

Regex Outlook 2007中的正则表达式规则?

Regex Outlook 2007中的正则表达式规则?,regex,vba,vbscript,outlook,outlook-2007,Regex,Vba,Vbscript,Outlook,Outlook 2007,是否可以基于正则表达式字符串在Outlook 2007中创建规则 我正在尝试为包含以下字符串的消息添加筛选器:4000-10,一个四位数,后跟破折号,然后是两位数,可以是0000-00到9999-99 我将其用作正则表达式:\b[0-9]{4}-[0-9]{2}\b,但过滤器不起作用。我也尝试过一些其他的修改,但没有成功。不过,我在网上找不到任何关于Outlook是否支持将正则表达式输入规则的具体信息,所以我想我会在这里询问一下,以防浪费时间 编辑:感谢Chris在下面的评论,我能够通过宏实现这

是否可以基于正则表达式字符串在Outlook 2007中创建规则

我正在尝试为包含以下字符串的消息添加筛选器:
4000-10
,一个四位数,后跟破折号,然后是两位数,可以是
0000-00
9999-99

我将其用作正则表达式:
\b[0-9]{4}-[0-9]{2}\b
,但过滤器不起作用。我也尝试过一些其他的修改,但没有成功。不过,我在网上找不到任何关于Outlook是否支持将正则表达式输入规则的具体信息,所以我想我会在这里询问一下,以防浪费时间

编辑:感谢Chris在下面的评论,我能够通过宏实现这个过滤器。我想我会在下面分享我的代码,以防它能帮助其他人:

Sub JobNumberFilter(Message As Outlook.MailItem)
    Dim MatchesSubject, MatchesBody
    Dim RegEx As New RegExp

    'e.g. 1000-10'
    RegEx.Pattern = "([0-9]{4}-[0-9]{2})"

    'Check for pattern in subject and body'
    If (RegEx.Test(Message.Subject) Or RegEx.Test(Message.Body)) Then
        Set MatchesSubject = RegEx.Execute(Message.Subject)
        Set MatchesBody = RegEx.Execute(Message.Body)
        If Not (MatchesSubject Is Nothing And MatchesBody Is Nothing) Then
            'Assign "Job Number" category'
            Message.Categories = "Job Number"
            Message.Save
        End If
    End If
End Sub

。您可以执行通配符搜索,尽管出于某些无法解释的原因,通配符是
%
,而不是
*

我不知道是否可以在规则中直接使用正则表达式,但您可以使用规则触发脚本,并且脚本可以使用正则表达式。我讨厌前景

首先,必须通过“工具-宏-打开Visual Basic编辑器”(快捷方式是Alt-F11)打开脚本编辑器

编辑器将打开。它应该在左上角的小面板中包含项目大纲。该项目将被列为VBAProject.OTM。展开此项目以显示Microsoft Office Outlook对象。将其展开以显示此OutlookSession。双击此Outlook会话打开代码编辑窗格(可能为空)

接下来选择工具菜单|引用并启用名为“Microsoft VBScript正则表达式5.5”的RegExp引用

现在可以创建一个子例程来执行过滤操作。请注意,由规则调用的子例程必须具有Outlook.MailItem类型的单个参数。例如:

' note that Stack Overflow's syntax highlighting doesn't understand VBScript's
' comment character (the single quote) - it treats it as a string delimiter.  To
' make the code appear correctly, each comment must be closed with another single
' quote so that the syntax highlighter will stop coloring everything as a string.'

Public Enum Actions
    ACT_DELIVER = 0
    ACT_DELETE = 1
    ACT_QUARANTINE = 2
End Enum

Sub MyNiftyFilter(Item As Outlook.MailItem)
    Dim Matches, Match
    Dim RegEx As New RegExp
    RegEx.IgnoreCase = True

    ' assume mail is good'
    Dim Message As String: Message = ""
    Dim Action As Actions: Action = ACT_DELIVER

    ' SPAM TEST: Illegal word in subject'
    RegEx.Pattern = "(v\|agra|erection|penis|boner|pharmacy|painkiller|vicodin|valium|adderol|sex med|pills|pilules|viagra|cialis|levitra|rolex|diploma)"
    If Action = ACT_DELIVER Then
        If RegEx.Test(Item.Subject) Then
            Action = ACT_QUARANTINE
            Set Matches = RegEx.Execute(Item.Subject)
            Message = "SPAM: Subject contains restricted word(s): " & JoinMatches(Matches, ",")
        End If
    End If

    ' other tests'

    Select Case Action
        Case Actions.ACT_QUARANTINE
            Dim ns As Outlook.NameSpace
            Set ns = Application.GetNamespace("MAPI")

            Dim junk As Outlook.Folder
            Set junk = ns.GetDefaultFolder(olFolderJunk)

            Item.Subject = "SPAM: " & Item.Subject
            If Item.BodyFormat = olFormatHTML Then
                Item.HTMLBody = "<h2>" & Message & "</h2>" & Item.HTMLBody
            Else
                Item.Body = Message & vbCrLf & vbCrLf & Item.Body
            End If

            Item.Save
            Item.Move junk

        Case Actions.ACT_DELETE
            ' similar to above, but grab Deleted Items folder as destination of move'

        Case Actions.ACT_DELIVER
            ' do nothing'
    End Select
End Sub


Private Function JoinMatches(Matches, Delimeter)
    Dim RVal: RVal = ""

    For Each Match In Matches
        If Len(RVal) <> 0 Then
            RVal = RVal & ", " & Match.Value
        Else
            RVal = RVal & Match.Value
        End If
    Next

    JoinMatches = RVal
End Function
短语“脚本”是一个可点击的链接。单击它,Outlook将显示一个对话框,其中应列出您先前创建的子例程。选择子例程并单击“确定”按钮

您可以单击“下一步”将异常添加到规则中,或者如果没有异常,请单击“完成”

现在,似乎这个过程还不够复杂,除非您使用代码签名密钥对脚本进行签名,否则每次停止并重新启动Outlook时,此规则都将停用

如果您还没有代码签名密钥,可以使用


我说过我讨厌Outlook吗?

这真的与编程有关吗?我的意思是,你不会问正则表达式是否正确,除非outlook支持正则表达式。实际上,这两个问题都是指正则表达式。我没有太多地使用正则表达式,所以我也不确定这一点。不过,在同一方面,如果Outlook甚至不支持正则表达式,这一点是没有意义的,所以这就是我打算使用它的地方。我认为这不重要,这似乎也与它匹配=“[0-9]{4}-[0-9]{2}”啊,好的,我明白了。也许它只在大括号内起作用。谢谢@我不认为每个人都应该结束提问。所有的aswer都涉及很多代码(ergo编程),所以这是一个编程问题。谢谢。奇怪的是,他们会更改通配符。这篇KB文章不是关于规则向导本身,而是CRM的一个附加组件。如果你分析这篇文章,你会发现在这个上下文中为什么使用%符号是完全有道理的。这是因为它是一个SQL查询,其中通配符实际上是一个%MS 2013在从查看收件箱的主搜索功能区搜索电子邮件主题和正文(至少)时支持一个百分比字符。但是,如果创建“搜索文件夹”(其内容是各种搜索条件的结果的虚拟文件夹),“搜索文件夹”中的搜索条件不支持百分比通配符。前进之路Microsoft>;)难怪我所有的通配符搜索都不起作用。谢谢+1你的链接是死的哇。是的,我能理解你的痛苦。我用PowerPoint做了一些轻松的编程(也做了可怕的噩梦),这太可怕了。非常感谢您的详细回答!当我有空的时候,我会在这方面做一些工作,看看我能做些什么。再次感谢你!除此之外,我发现还有一种更简单的宏签名方法:使用自签名证书。您可以通过Office的一个可选安装部分(称为VBA项目数字证书)创建一个。对于
Enum
,可以使用+1(我希望可以+1000!)。我想我需要回去,让我写过的每一个宏的可读性提高一百万倍!谢谢这是主题中的工作,但如何过滤html正文?我有点像。我想过滤一下
Apply this rule after the message arrives
on this machine only
run a script