Проблема с регулярным выражением Android для извлечения данных - PID на журнал - PullRequest
0 голосов
/ 03 июня 2019

Я noob на Android, и я пытаюсь извлечь PID из журнала Android, но когда я пытался с регулярным выражением, не извлекайте значение в моей переменной.Формат сообщения журнала такой:

E/AndroidRuntime(14700): Process: com.example.log_v_02, PID: 14700

Но иногда формат таков:

E/AndroidRuntime( 4700): Process: com.example.log_v_02, PID: 14700

С пробелом после первого "("

IЯ использую шаблон и класс соответствия, чтобы сделать это, это мой код:

Pattern saca_pid = Pattern.compile(".*( [0-9]{1,4}).*||.*([0-9]{5,}).*");
StringBuilder log=new StringBuilder();
String line = "";
while (true) {
    try {
        if (!((line = bufferedReader.readLine()) != null)) break;
    } catch (IOException e) {
        e.printStackTrace();
    }
    Boolean matches = Pattern.matches(patron_malicioso,line);

    Matcher encuentra_pid = saca_pid.matcher(line);
    if(encuentra_pid.find())
    {
        String pid = encuentra_pid.group(1);
    }

}

1 Ответ

0 голосов
/ 03 июня 2019

Чередование регулярных выражений представляет собой одну трубу, то есть |, не двойную трубу ||, что является логическим ИЛИ.Точное исправление вашего кода:

Pattern saca_pid = Pattern.compile(".*( [0-9]{1,4}).*|.*([0-9]{5,}).*");

Исправление этой проблемы может заставить ваш код работать, но я бы предложил использовать следующий шаблон:

\(\s*(\d+)\):

Ваш обновленный код:

Pattern saca_pid = Pattern.compile("\\(\\s*(\\d+)\\):");
StringBuilder log = new StringBuilder();
String line = "";
while (true) {
    try {
        if (!((line = bufferedReader.readLine()) != null)) break;
    } catch (IOException e) {
        e.printStackTrace();
    }
    Matcher encuentra_pid = saca_pid.matcher(line);
    if (encuentra_pid.find()) {
        String pid = encuentra_pid.group(1);
    }
}

Обновленный шаблон полностью исключает необходимость чередования, сделав начальный пробел перед числом необязательным.

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