正则表达式用于捕获单词分隔的术语

时间:2019-04-26 20:50:08

标签: regex

我尝试使用以下格式用正则表达式解析几个字符串:

FIELDA:wiz和FIELDB:foo和FIELDB:bar AND FIELDB:baz .......

FIELDB :(某个值)模式将出现0到N次,始终由术语AND分隔。 FIELDA始终存在

是否存在可用于捕获所有值的正则表达式模式:

wiz, foo, bar, baz

1 个答案:

答案 0 :(得分:2)

您可以使用基于环视的正则表达式,并使用此正则表达式匹配所有您想要的值,

(?<=FIELD[AB]:)\S+(?= AND|$)

正则表达式说明

  • (?<=FIELD[AB]:)-向后积极看待以确保匹配的文本前面带有FIELDAFIELDB
  • \S+-匹配一个或多个非空格文本
  • (?= AND|$)-积极向前看,以确保匹配的文本后跟AND或使用$的字符串结尾

Regex Demo

Java Code Demo

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