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

标签 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]:

所以它 split 成

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

我使用 String#split(regex) 作为 || 符号,它工作得很好,但现在我希望它在 的任何地方拆分>||&&!= 我希望我的代码高效、干净且易于阅读。

最佳答案

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

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

这是一个测试正则表达式代码的好网站... 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]:

关于java - 使用具有不同捕获组的正则表达式将字符串拆分为多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981766/

相关文章:

java - 为什么以及如何在 Java 中的构造函数不初始化的情况下初始化实例变量?

java - 前端 Controller 设计模式和 MVC 设计模式有什么区别

java - 如何在 web.xml 中配置 spring-boot servlet?

regex - 将正则表达式与 perl/sed/awk 中的变量字符串匹配

java - 从文件中读取并分割行

java - Spring Boot 从 1.5.8 迁移到 2.1.14-RELEASE 后,BootJar 没有创建 BOOT-INF 文件夹

Python - 正则表达式首先找到第二个匹配项

regex - grep 将大写单词转换为小写,同时排除罗马数字

c++ - 各种形式的 getline()

我可以在空字符串中复制一个字符串吗?