Java: Получить имена групп, используя класс Pattern? - PullRequest
1 голос
/ 29 сентября 2011

Я пытаюсь использовать классы Pattern и Matcher для извлечения совпадений из строки.

Моя строка выглядит следующим образом: $ abc $ 12def $ def $$ 11 $

Я хочу получить $ abc $, $ def $ и $ 11 $ из этой строки.

Я подумал об использовании следующего регулярного выражения: \ $ (. *) \ $ (Это нормально работает при обычном сопоставлении с образцом).

Моя Java-программа не может получить их. Все, что возвращает мне, это вся строка. Вот моя программа:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public final class dollar {

  private static String REGEX = "\\$(.*)\\$";

  private static String INPUT = "$12f$$555$button button$abc0$";

  public static void main(String[] args) {
    Pattern p = Pattern.compile(REGEX);
    Matcher m = p.matcher(INPUT); // get a matcher object
    boolean found = m.find();
    while (found) {
      System.out.println("TEST:" + m.start());
      System.out.println("TEST:" + m.end());
      found = m.find();
    }
  }
}

Я также попробовал следующее:

m.matches()
m.groupCount()
m.group(1)
m.group(2)

Но это тоже не работает. Как это сделать? Это можно сделать на jdk6 или что-то доступно в jdk7?

Ценю всю помощь !!!

1 Ответ

3 голосов
/ 29 сентября 2011

ваша проблема в том, что * жадный. Попробуйте \$(.*?)\$ вместо

$ abc $ 12def $ def $$ 11 $ = $, за которым следует 0 или более [что угодно] (в данном случае это abc $ 12def $ def $$ 11), за которым следует $

используя *? заставляет движок регулярных выражений останавливать использование символов как можно раньше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...