我正在尝试使用正则表达式匹配我的字符串。下面是我需要匹配的字符串 -
/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
有没有办法想出能够匹配我上面所有字符串的单个正则表达式?
答案 0 :(得分:0)
只需将最后三个部分添加到非捕获组中即可将其作为可选部分。
^/(pp|ppuu)(?:/dc)?(?:/(phxd|slcw|lvsr))?(?:/y[0-9]+)?$
(?:..)
名为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);
}