Разделить файл и строку в сообщении об ошибке с помощью регулярных выражений - PullRequest
2 голосов
/ 24 января 2011

Я получаю строку, как

main.c:11: error: 'qz' undeclared (first use in this function)

как параметр для функции. Мне нужно использовать регулярные выражения и разделить имя файла (main.c), строки (11) и сообщения ('qz' undeclared (первое использование в этой функции)) Я написал регулярное выражение, как это

private static Pattern patern=Pattern.compile("([a-zA-Z0-9_-]+\.c:)([0-9]+:)(.)*");

но оно не раскололось. Кто-нибудь может сказать мне, какое регулярное выражение использовать?

Ответы [ 2 ]

1 голос
/ 24 января 2011

Я бы сделал это так:

^(.*?):(\d+):\s(error|warning):\s(.*?)

Это даст вам имя файла в качестве первого результата, номер строки в качестве второго и сообщение об ошибке в качестве четвертого совпадения.Кроме того, он также фиксирует предупреждения того же формата.

Отредактировано для захвата номера строки.

1 голос
/ 24 января 2011

Вам по крайней мере нужно убежать от этого \. Попробуйте

"([a-zA-Z0-9_-]+\\.c:)([0-9]+:)(.)*"

вместо.

Вот демоверсия:

import java.util.regex.*;

public class Test {

    public static void main(String[] args) {
        String input = "main.c:11: error: 'qz' undeclared (first use in this function)";

        Pattern p = Pattern.compile("([^:]+\\.c):(\\d+):(.*)");
        Matcher m = p.matcher(input);

        if (m.matches()) {
            System.out.println("File: " + m.group(1));
            System.out.println("Line: " + m.group(2));
            System.out.println("Message: " + m.group(3));
        }
    }
}

Печать:

File: main.c
Line: 11
Message:  error: 'qz' undeclared (first use in this function)

Другой вариант будет просто сделать input.split(":").

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