根据VBScript中的正则表达式拆分字符串

时间:2010-06-23 12:20:41

标签: regex asp-classic vbscript

我想根据一个正则表达式将一个字符串拆分成一个数组,这个正则表达式类似于PHP中的 preg_split 或VBScript 拆分功能但使用正则表达式代替分隔符。

使用VBScript Regexp对象,我可以执行一个正则表达式但它返回匹配(所以我得到了我的分离器的集合......这不是我想要的)

有办法吗?

谢谢

4 个答案:

答案 0 :(得分:4)

如果您可以保留一个特殊的分隔符字符串,即您可以选择的字符串,它永远不会成为真实输入字符串的一部分(可能类似于"#@#"),那么您可以使用正则表达式替换来替换所有字符串您的模式与"#@#"匹配,然后"#@#"上拆分。

另一种可能性是使用捕获组。如果您的分隔符正则表达式是\d+,那么您搜索(.*?)\d+,然后提取每个匹配中捕获的组(see beforeafter on rubular.com)。

答案 1 :(得分:0)

您总是可以使用返回的匹配数组作为split函数的输入。您使用第一个匹配分割原始字符串 - 字符串的第一部分是第一个分割,然后分割字符串的剩余部分(减去第一部分和第一个匹配)...继续直到完成。

答案 2 :(得分:0)

我写这个是供我使用。可能就是你要找的东西。

    StringBuilder fileString = new StringBuilder();
        String line = "";
        char readChar;

        BufferedReader br;
        try {
            br = new BufferedReader(new FileReader(inputFile));
            while((line=br.readLine())!=null)
            {
                fileString.append(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
System.out.println(fileString.toString());

答案 3 :(得分:0)

我认为您可以通过使用Execute匹配所需的分隔符字符串,但将所有先前的字符(在先前的匹配之后)捕获为一个组来实现。这是一些可以满足您需求的代码。

'// Function splits a string on matches
'// against a given string
Function SplitText(strInput,sFind)
    Dim ArrOut()


    '// Don't do anything if no string to be found
    If len(sFind) = 0 then
        redim ArrOut(0)
        ArrOut(0) = strInput
        SplitText = ArrOut
        Exit Function
    end If

    '// Define regexp
    Dim re
    Set re = New RegExp 

    '// Pattern to be found - i.e. the given
    '// match or the end of the string, preceded
    '// by any number of characters
    re.Pattern="(.*?)(?:" & sFind & "|$)" 
    re.IgnoreCase = True 
    re.Global = True

    '// find all the matches >> match collection
    Dim oMatches: Set oMatches = re.Execute( strInput )

    '// Prepare to process
    Dim oMatch
    Dim ix
    Dim iMax

    '// Initialize the output array
    iMax = oMatches.Count - 1
    redim arrOut( iMax)

    '// Process each match 
    For ix = 0 to iMax

        '// get the match
        Set oMatch = oMatches(ix)


        '// Get the captured string that precedes the match
        arrOut( ix ) = oMatch.SubMatches(0)

    Next

    Set re = nothing

    '// Check if the last entry was empty - this
    '// removes one entry if the string ended on a match
    if arrOut(iMax) = "" then Redim Preserve ArrOut(iMax-1)

    '// Return the processed output
    SplitText = arrOut

End Function