none
怎样将下面的正则替换VB6代码改成能查找替换有多重嵌套的符合条件的字符串? RRS feed

  • 问题

  • 我用VB6编了一段为文本文件进行复杂正则替换的代码,因要替换的字符串有多重嵌套(如下面标为红色的替换),所以一次替换不一定能成功,需要多次,我想用循环语句(当然,替换完后要跳出循环),但不知道怎么改写以下红色的部分使之成完成多重嵌套的替换。

    Private Sub Command1_Click()
      '存为FBD文件后的特殊字符替换(脱离Word在小样文件中替换)
        Const ForReading = 1
        Const ForWriting = 2
        Dim s As String    '字符串
        Dim p As String    '正则表达式
        Dim r As String    '要替换的字符串
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.OpenTextFile("C:\temp.txt", ForReading)
            s = objFile.ReadAll
            objFile.Close
          '以下是查找替换串
            s = StrReplace(s, "\[FKDL\(S\]([^]+)\[FKDL\)\]([\r\n]*)\[FKDL\(S\]", "[FKDL(S]$1")

        Set objFile = objFSO.OpenTextFile("C:\temp.txt", ForWriting)
            objFile.WriteLine s
            objFile.Close
    End Sub

    以下是调用函数:
    Function StrReplace(s As String, p As String, r As String) As String
    '
        Dim re As RegExp
        Set re = New RegExp
        re.IgnoreCase = False ' 区分大小写
        re.Global = True '全程查找
        re.Pattern = p
        StrReplace = re.Replace(s, r)
    End Function

    2008年12月3日 14:24

答案

  • Code Snippet

    dim sold as string

    sold=""

    while  sold<>s

    sold=s

    s = StrReplace(s, "\[FKDL\(S\]([^]+)\[FKDL\)\]([\r\n]*)\[FKDL\(S\]", "[FKDL(S]$1")

    wend

     

     

     

    2008年12月4日 1:19
    版主

全部回复