Java не работал мой регулярное выражение, онлайн-редакторы сделали - PullRequest
0 голосов
/ 19 февраля 2020

Добрый вечер,

У меня эта проблема. У меня есть текстовый файл с несколькими блоками коммитов, собранных из Github. Мне нужно разбить этот файл на блоки, каждый из которых представляет коммит. Пример файла представлен ниже:

commit 7aa32a74edba59f1c295a41e95f5deab0d1753c8
Author: borisperezg

commit b6e0a1749da95238af5be0081074ce123bf507bd
Author: borisperezg 

commit 6d77c0a78b2a4b8386fbaeaaeaf28fcf89ec8b2c
Author: borisperezg 

Однако, когда я использую регулярное выражение в онлайн-редакторе регулярных выражений (или даже в локальном текстовом редакторе), он работает для группировки блоков текста, но Java не сделал Мое регулярное выражение:

^(commit\s+[\w|\d|\n|:|\s]+)+
Another version: ^(commit\\s+[\\w|\\d|\\n|:|\\s]+).*$
Another version: .*^(commit\\s+[\\w|\\d|\\n|:|\\s]+).*$

Моя реализация Java представлена ​​ниже:

public static void main(String[] args) {

    String lines = // file reader and the content stored here;

    String pattern = "^(commit\\s+[\\w|\\d|\\n|:|\\s]+).*$";

    // Create a Pattern object
    Pattern r = Pattern.compile(pattern);

    // Now create matcher object.
    Matcher m = r.matcher(lines);
    m.matches();
    // Also tested m.find()

    System.out.println(m.group(0));
    System.out.println(m.group(1));
    System.out.println(m.group(2));     

}

Я не знаю, это должно быть просто.

Пожалуйста, кто-нибудь может мне помочь. Заранее спасибо.

1 Ответ

1 голос
/ 19 февраля 2020

Если вы хотите получить каждый коммит отдельно, вам нужно использовать find() l oop, и ваш паттерн должен заканчиваться при достижении следующей строки commit.

String lines = "commit 7aa32a74edba59f1c295a41e95f5deab0d1753c8\r\n" + 
               "Author: borisperezg\r\n" + 
               "\r\n" + 
               "commit b6e0a1749da95238af5be0081074ce123bf507bd\r\n" + 
               "Author: borisperezg \r\n" + 
               "\r\n" + 
               "commit 6d77c0a78b2a4b8386fbaeaaeaf28fcf89ec8b2c\r\n" + 
               "Author: borisperezg \r\n";

String pattern = "commit [0-9a-f]+\\R(?:(?!\\Rcommit ).*\\R)*";

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher m = r.matcher(lines);
while (m.find()) {
    System.out.print(m.group()); // Captured text ends with a line-separator
    System.out.println("==================================================");
}

Вывод

commit 7aa32a74edba59f1c295a41e95f5deab0d1753c8
Author: borisperezg
==================================================
commit b6e0a1749da95238af5be0081074ce123bf507bd
Author: borisperezg 
==================================================
commit 6d77c0a78b2a4b8386fbaeaaeaf28fcf89ec8b2c
Author: borisperezg 
==================================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...