vbscript无法处理正则表达式

时间:2016-04-16 13:39:37

标签: vbscript

我正在尝试使用Regex返回vbscript中的匹配单词。我的hta文件位于gist

我的vbs Sub是: -

Sub ProcessFile(FileName)
On Error Resume Next

Set fso = CreateObject("Scripting.FileSystemObject")
Set fileObj = fso.GetFile(FileName)
Set contents = fileObj.OpenAsTextStream(1, 0)
'MsgBox contents.ReadAll
        If err.number = 0 then
        Set r = New RegExp
        r.Global = True
        r.Pattern = "\[CATS\]\.(\[[^]]+\])"
        Set ms = r.Execute(contents)
        For Each m In ms
            MsgBox m.SubMatches(0)
            demo.innerHTML = demo.innerHTML & m.SubMatches(0)
        Next

        Else
            MsgBox err.number
        End If
End Sub

它不会返回匹配的单词 有一些想念

对于包含以下文本的文本文件: -

[CATS].[Hello_World1] Lorem Ipsum [CATS].[Hi_Venus1] Demo Text [CATS].[Yo_Moon1] Lorm Ipsum 

[CATS].[Hello_World] Lorem Ipsum [CATS].[Hi_Venus] Demo Text [CATS].[Yo_Moon] Lorm Ipsum 

预计会返回[Hello_World1], [Hi_Venus1], [Yo_Moon1], [Hello_World], [Hi_Venus], [Yo_Moon]

2 个答案:

答案 0 :(得分:3)

您使用活动的OERN运行代码。这隐藏了错误。例如:contents是一个流(因此contents.ReadAll()'工作')。但是r.Execute(contents)不可能“正常”,因为.Execute期望/需要一个字符串。

更新评论:

如果您知道MsgBox contents.ReadAll显示了流的字符串内容,则Set ms = r.Execute(contents.ReadAll())不应该太难。 请记住:Set用于将对象(流,匹配集合,...)分配给变量;所以Set str = contents.ReadAll不可能“有效”(如果你禁用/删除了OERN,你会被告知)。

答案 1 :(得分:3)

你也可以使用Do ... Loop语句逐行处理它。

Sub ProcessFile(FileName)

Set fso = CreateObject("Scripting.FileSystemObject")
Set fileObj = fso.GetFile(FileName)
Set contents = fileObj.OpenAsTextStream(1, 0)
        If err.number = 0 then
        Linenum = 0
        Do Until contents.AtEndOfStream
            line = contents.readline
            Linenum = Linenum + 1
            Set r = New RegExp
            r.Pattern = "\[CATS\]\.(\[[^]]+\])"
            Set ms = r.Execute(line)
                For Each m In ms
                    MsgBox m.SubMatches(0)
                    demo.innerHTML = demo.innerHTML & m.SubMatches(0)
                Next
        Loop    
        Else
            err.clear
        End If
End Sub