vbscript无法处理正则表达式

vbscript无法处理正则表达式,vbscript,Vbscript,我正在尝试使用正则表达式在vbscript中返回匹配的单词。我的hta文件位于 我的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 conten

我正在尝试使用正则表达式在vbscript中返回匹配的单词。我的hta文件位于

我的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 

当你用一个活跃的OERN运行你的代码时,它将返回
[Hello\u World1],[Hi\u Venus1],[Yo\u Moon1],[Hello\u World],[Hi\u Venus],[Yo\u Moon1],[Yo\u World],[Hi\u Venus],[Yo\u Moon]
。这隐藏了错误。例如:
contents
是一个流(因此
contents.ReadAll()
'works')。但是
r.Execute(contents)
不可能“工作”,因为
.Execute
需要一个字符串

更新wrt注释:

如果您知道
MsgBox contents.ReadAll
显示流的字符串内容,那么
Set ms=r.Execute(contents.ReadAll())
应该不会太难。
请记住:
Set
用于将对象(流、匹配集合等)分配给变量;因此,
Set str=contents.ReadAll
不可能“工作”(如果禁用/删除OERN,您会被告知这一点)。

您还可以使用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

和从我们的角度阅读你的问题。你错过了什么?还是不知道…很明显,你的问题是什么。我们无法读懂你的心思。什么不起作用了?对不起。。。。。。我已经更新了问题,没有意识到有什么方法可以做到这一点。。我试过设置str=contents.ReadAll非常感谢。。我必须遵循的一个教训是,总是在没有OERN的情况下工作。@KailashSingh调试代码问题时,首先要注释掉它。
如果Isnull(ms)=false,那么
-ms永远不能为Null,将布尔表达式与布尔常量进行比较是毫无意义的。