Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在正则表达式中组合多个字符串?_Java_Regex_String - Fatal编程技术网

Java 如何在正则表达式中组合多个字符串?

Java 如何在正则表达式中组合多个字符串?,java,regex,string,Java,Regex,String,我正在尝试使用正则表达式匹配字符串。下面是我需要匹配的字符串- /pp/dc/phxd/y1 /pp/dc/slcw/y1 /pp/dc/lvsr/y1 /ppuu/dc/phxd/y1 /ppuu/dc/slcw/y1 /ppuu/dc/lvsr/y1 下面是我得到的正则表达式,它工作得很好- Pattern pattern = Pattern.compile("^/(pp|ppuu)/dc/(phxd|slcw|lvsr)/y[0-9]+$"); Matcher m = pat

我正在尝试使用正则表达式匹配字符串。下面是我需要匹配的字符串-

/pp/dc/phxd/y1
/pp/dc/slcw/y1
/pp/dc/lvsr/y1

/ppuu/dc/phxd/y1
/ppuu/dc/slcw/y1
/ppuu/dc/lvsr/y1    
下面是我得到的正则表达式,它工作得很好-

Pattern pattern = Pattern.compile("^/(pp|ppuu)/dc/(phxd|slcw|lvsr)/y[0-9]+$");

Matcher m = pattern.matcher(string_to_test);

if(m.find()) {

}
现在,除了上面的字符串之外,我还需要匹配下面的字符串-

/pp/dc/phxd
/pp/dc/slcw
/pp/dc/lvsr

/ppuu/dc/phxd
/ppuu/dc/slcw
/ppuu/dc/lvsr   


/pp/dc

/ppuu/dc

/pp

/ppuu

有没有办法找到一个正则表达式来匹配上面所有的字符串?

只需将最后三部分添加到一个非捕获组中,作为可选部分

^/(pp|ppuu)(?:/dc)?(?:/(phxd|slcw|lvsr))?(?:/y[0-9]+)?$

?:。。打过电话?在非捕获组之后,将相应的组作为可选组。

只需将其设置为一系列选项即可

 # ^/(pp|ppuu)(?:/dc(?:/(phxd|slcw|lvsr)(?:(/y[0-9]+))?)?)?$

 ^ /
 ( pp | ppuu )
 (?:
      /dc
      (?:
           /
           ( phxd | slcw | lvsr )
           (?:
                ( /y [0-9]+ )
           )?
      )?
 )?
 $

是的,您需要添加嵌套?关于可选的部分。@user2809564-请注意,您接受的答案是不正确的。@sln我明白了,您能解释一下为什么不正确,以便我测试一下吗?@user2809564-您列出了级联依赖项/选项的完整示例。您选择的答案不会这样做。将来看到这篇文章的人会感到困惑。更改您的问题陈述以显示不存在依赖项。例如,您可以添加I还需要匹配/ppuu/y1和所有其他排列。
Pattern pattern = Pattern.compile("^(?<match>/.+)/.+");
    Matcher m = pattern.matcher("str_input");
    while (m.find()) {
        String match = m.group("match");
        System.out.println(match);
        m = pattern.matcher(match);
    }