我尝试使用以下格式用正则表达式解析几个字符串:
FIELDA
:wiz和FIELDB
:foo和FIELDB
:bar AND FIELDB
:baz .......
FIELDB
:(某个值)模式将出现0到N次,始终由术语AND
分隔。 FIELDA
始终存在
是否存在可用于捕获所有值的正则表达式模式:
wiz, foo, bar, baz
答案 0 :(得分:2)
您可以使用基于环视的正则表达式,并使用此正则表达式匹配所有您想要的值,
(?<=FIELD[AB]:)\S+(?= AND|$)
正则表达式说明
(?<=FIELD[AB]:)
-向后积极看待以确保匹配的文本前面带有FIELDA
或FIELDB
\S+
-匹配一个或多个非空格文本(?= AND|$)
-积极向前看,以确保匹配的文本后跟AND
或使用$
的字符串结尾String s = "FIELDA:wiz AND FIELDB:foo AND FIELDB:bar AND FIELDB:baz";
Pattern p = Pattern.compile("(?<=FIELD[AB]:)\\S+(?= AND|$)");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
打印
wiz
foo
bar
baz