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

时间:2014-10-05 21:09:26

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

有没有办法想出能够匹配我上面所有字符串的单个正则表达式?

3 个答案:

答案 0 :(得分:0)

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

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

DEMO

(?:..)名为non-capturing group。非捕获组之后的?使相应的组成为可选组。

答案 1 :(得分:0)

将它变成一系列选项。

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

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

答案 2 :(得分:0)

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);
    }