регулярное выражение Java получить подстроку - PullRequest
1 голос
/ 18 ноября 2011

Не могу найти хорошего ресурса для разбора с помощью регулярного выражения.Может кто-нибудь показать мне путь.

Как я могу разобрать это утверждение?

"Точка останова 10, main () в file.c: 10"

Я хочу получить подстроку "main ()" или 3-е слово инструкции.

Ответы [ 6 ]

4 голосов
/ 18 ноября 2011

Это работает:

public void test1() {
    String text = "Breakpoint 10, main () at file.c:10";
    String regex = ",(.*) at";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);

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

В основном регулярное выражение .(.*) at с group (1) возвращает значение main ().

2 голосов
/ 18 ноября 2011

Предполагая, что вы хотите 3-е слово вашей строки (как сказано в ваших комментариях), сначала разбейте его, используя StringTokenizer.Это позволит вам указать разделитель (пробел по умолчанию)

List<String> words = new ArrayList<String>();
String str = "Breakpoint 10, main () at file.c:10";
StringTokenizer st = new StringTokenizer(str); // space by default

while(st.hasMoreElements()){
    words.add(st.nextToken());
}

String result = words.get(2);

Возвращает main Если вы также хотите (), так как вы определили пробелы как разделитель, вам также нужно взять следующийслово words.get(3)

1 голос
/ 18 ноября 2011
  1. Хороший сайт регулярные-выражения.info
  2. Хороший онлайн-тестер regexpal.com
  3. Java http://download.oracle.com/javase/tutorial/essential/regex/

Я обращаюсь к ним, когда хочу поиграть с Regex

1 голос
/ 18 ноября 2011

Вы видели стандартный учебник Sun по 1001 * по регулярным выражениям ?В частности, будет полезен раздел о соответствующих группах .

0 голосов
/ 18 ноября 2011

Ну, регулярное выражение main \(\) это анализирует.Тем не менее, я подозреваю, что вам нужно все после первого запятой и перед последним «at»: ,(.*) at дает вам это в group (1) , которое открывается скобкой в ​​выражении.

0 голосов
/ 18 ноября 2011

Попробуйте: .*Breakpoint \d+, (.*) at

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