Регулярное выражение для новых строк - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить записи журнала в моем коде, используя Java. Я использую это регулярное выражение:

Log\.[dD].*\);

Данные испытаний:

Log.d(TAG, "Construct product info");

test test test test 

Log.d(TAG, "Loading Product Id: %d, Version: %s",
    productInfo.getProductId(),
    productInfo.getProductVersion());

test test test test 

Log.d(TAG, "Loading Product Id: " +
    ProductId + "Version:" +
    Version);

test test test test

по какой-то причине регулярное выражение набирает только 1-ю строку, которая

Log.d(TAG, "Construct product info");

Правильный вывод должен быть:

Log.d(TAG, "Construct product info");

Log.d(TAG, "Loading Product Id: %d, Version: %s",
    productInfo.getProductId(),
    productInfo.getProductVersion());

Log.d(TAG, "Loading Product Id: " +
    ProductId + "Version:" +
    Version);

https://regex101.com/r/OCl9dy/3

Если я не ошибаюсь, регулярное выражение должно возвращать все операторы Log. [DD], которые заканчиваются);

Пожалуйста, дайте мне знать, почему он не подхватывает других и как это исправить.

спасибо

1 Ответ

0 голосов
/ 27 июня 2018

Это регулярное выражение должно работать:

Log\.[dD][\s\S]*?\);

Вы сделали две ошибки:

  • . не соответствует окончанию строки. Вы должны использовать что-то похожее на [\s\S], что соответствует всему.
  • Вам нужно сопоставить лениво , прекратите сопоставление на первом ), который вы видите. Так что пишите *? вместо *.

Обратите внимание, что регулярное выражение не будет работать для таких вещей, как Log.d(TAG, "Construct (product); info");, потому что первый ); не является концом вызова метода. Чтобы соответствовать этому, я предлагаю вам написать / использовать парсер.

Демо

...