使用具有不同捕获组的正则表达式将字符串拆分为多个字符串

时间:2017-07-08 01:54:52

标签: java regex string

我试图将一个字符串拆分成多个字符串,而不是只使用一个简单的正则表达式模式字符串,我试图使用一个正则表达式模式,如果它检测到某些字符,将字符串拆分成不同的字符串,但字符是不同的。它没有将字符串拆分成不同的字符串,而是给了我所说的字符串中的每个字符。

String[] splitstr = line.split("([&]{2})?([|]{2})?(!=)?");

使用上面这一行,我有一个名为line的变量,作为一个例子,我从文件中放入这一行:

:if[input=right || input=Right]:

我只是想知道是否有办法将其拆分为

":if[input=right", "input=Right]:"

如果我这样写一行:

:if[input=right || input=Right && input != null]:

这样就分成了

":if[input=right", "input=Right", "input != null]:"

我正在使用String#split(regex)作为||符号,它运行得很好,但现在我希望它分割为||&&或{{ 1}}我希望我的代码高效,干净,易于阅读。

2 个答案:

答案 0 :(得分:2)

下面的java类会将您的示例字符串拆分为您感兴趣的部分。代码将原始字符串拆分为“||”和'&&'全球范围内的分层即,如果你有多个'||'或'&&'在原始字符串中的运算符,每个部分都将被拆分。

需要注意的一点是需要转义(\)特殊字符。在Java中,您还需要转义转义,因此您需要2个反斜杠才能在字符串中包含文字。

这是一个测试regEx代码的好网站... Regular Expressions 101

public class splitStrRegex {

    public static void main(String[] args) {

        String myStr = ":if[input=right || input=Right && input != null]:";
        String[] myStrings = myStr.split("\\|\\||&&");
        for(int i = 0; i < myStrings.length; i++) {
            System.out.println(myStrings[i].trim());
        }
    }
}

<强>输出:

:if[input=right
input=Right
input != null]:

答案 1 :(得分:0)

这是一个非常有趣的问题。网站上有更多答案,例如:Java String.split() Regex 此外,它很容易检查,如:

public class Reg {

    public static void main(String args[]) {
        String string = "00!=4-0||34 & 55!=6";
        String[] parts = string.split("[&||!=]");
        for (int i = 0; i < parts.length; i++) {
            System.out.println("Part: " + parts[i]);
        }
    }
}

<强>输出:

Part: 00
Part: 
Part: 4-0
Part: 
Part: 34 
Part:  55
Part: 
Part: 6

但问题是&#34;&amp;&amp;&#34;,例如,对于:

    String string = "00!=4-0||34 && 55!=6";
    String[] parts = string.split("[&&||!=]");

<强>输出:

Part: 00
Part: 
Part: 4-0
Part: 
Part: 34 && 55
Part: 
Part: 6

我猜我们需要了解&amp;&amp;在其他解释中,例如:

public class Reg {

    public static void main(String args[]) {
        String string = "00!=4-0||34 && 55!=6";
        String[] parts = string.split("[&^&||!=]");
        for (int i = 0; i < parts.length; i++) {
            System.out.println("Part: " + parts[i]);
        }
    }
}

<强>输出:

Part: 00
Part: 
Part: 4-0
Part: 
Part: 34 
Part: 
Part:  55
Part: 
Part: 6