正则表达式中的嵌套括号

时间:2017-02-19 21:09:17

标签: java regex

我在java中使用regex从以下用户条目中提取数据:

String entry1 = "add to xx16,John Doe";
String entry2 = "add to ab20,John Doe;Richard Roe;John Stiles";

它们可以有多个名称,但如果它们有,则必须用分号分隔。现在我想要一个正则表达式给我这些参数。我想出了那个

Pattern pattern = Pattern.compile("add to ([a-z|\\d]*),([a-zA-Z]*\\s[a-zA-Z]*)[;([a-zA-Z]*\\s[a-zA-Z]*)]*");
Matcher matcher = pattern.matcher(entry);
matcher.matches();
//get inputs with matcher.group();

适用于entry1等条目,但不适用于entry2。有谁看到我的错误?

2 个答案:

答案 0 :(得分:3)

你不能拥有无限数量的可变组。只需抓住它们然后拆分。

由于您没有测试匹配器是否真正匹配,我假设您不太关心验证输入的格式而只想抓取值。所以你可以这样做:

Pattern pattern = Pattern.compile("add to (\\w+),(.*)");
Matcher matcher = pattern.matcher(entry);
matcher.matches(); // FIXME: check if it matches
String[] names = matcher.group(2).split(";");

答案 1 :(得分:1)

xx16
John Doe

ab20
John Doe
Richard Roe
John Stiles

输出:

Option c = Option.builder("c")
        .hasArgs() // sets that number of arguments is unlimited
        .build();
        Options options = new Options();
        options.addOption(c);