我在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
。有谁看到我的错误?
答案 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);