从字符串中提取多个组?

时间:2015-02-12 16:23:00

标签: java regex

我正在尝试从字符串中提取一些信息,如下所示:

[最近,很多,brane,通胀,情景,被提议,-LRB-,见,,,,,,-LSB-,3,-RSB-,for,a,review,-RRB - ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,来自,粒子,物理,-LRB-,见,,,,,,,-LSB-,4,-RSB-,-RRB-,。]

所以我需要提取的是方括号之间出现的值 (例如-LSB-,3,-RSB-,&& -LSB-,4,-RSB - ,)

以下是我的代码的相关摘录:

String pttrn = ".*-LSB-,\\s(\\d),\\s-RSB-,.*"; 
Pattern pattern = Pattern.compile(pttrn); 
m = pattern.matcher(sentence.toString()); rgx = m.find(); 
int count = 0;
while (rgx) {
    String ref = (m.group(1));             
    count++;
    System.out.println("found: " + count + " : " + m.start() + " - " + m.end());
    statement.clearParameters();
    statement.setString(1, rs.getString("ut"));
    statement.setString(2, rs.getString("sec_title"));  
    statement.setString(3, ref);
    statement.executeUpdate(); 

     }

作为此代码的结果,我总是得到一个值。当我尝试m.group(2)时,我得到一个错误,说没有第2组..我可能错过了什么?

2 个答案:

答案 0 :(得分:2)

您的模式中只有一个组,因此一个匹配项只会提供一个组。您需要多次应用搜索:

while (m.find()) {
    System.out.println(m.group(1));
}

这意味着您的代码应为:

String input = "...";
Matcher matcher = Pattern.compile("-LSB-,\\s(\\d),\\s-RSB-,").matcher(input);

while (matcher.find()) {
    System.out.println(matcher.group(1));
    // the real work should go here
}

对我来说,打印出来:

3
4

答案 1 :(得分:1)

你必须在你的while循环中调用find:

  while (m.find()) {