Как написать регулярное выражение для извлечения строк из стека ниже - PullRequest
1 голос
/ 22 апреля 2019

Как написать регулярное выражение для извлечения строк из нижнего стека

Я новичок в регулярном выражении и хочу извлечь строки из нижнего стека.Ниже приведены правила

  1. После исключения извлеките первую строку, начинающуюся с 'at'
  2. Получите первую строку, начинающуюся с com.test (эта строка необязательна, может или не можетприсутствовать во всем файле)
  3. Получить строку, начинающуюся с com.test и не похожую на шаг 2 com.Пакет тестовой строки (Эта строка необязательно может присутствовать или не присутствовать во всем файле)

Частично опробовано с прогнозом, но безрезультатно.

(Exception).*[\n\r]*.*at\s+(((?<pack>.*)(.*\.(?<packfunc>.*\..*)\())).*((?<Offset>:\d+))\)(((?=(\n.*)*at\s+((?<pack1>(com.test.*))(.*\.(?<packfunc1>(.*\..*)))[\(]).*(?<ffset1>:\d+)\))|))

Ввод

IllegalArgumentException

at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at com.test.package1.user1.client1.client1.Call.invoke(Call.java:90)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at com.test.package1.user1.client1.client1.Call.invoke(SrvCall.java:84)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at java.security.AccessController.doPrivileged(Native Method)
at com.test.package2.user2.client2.client2.Call.invoke(Call.java:90)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)

Ожидаемый результат 1.org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection (ActionContributionItem.Java: 584)

2.com.test.package1.user.client.client1.Call.invoke (Call.java:90)

3.com.test.package2.user2.client2.client2.Call.invoke (Call.java:90)

1 Ответ

1 голос
/ 22 апреля 2019

Вы можете использовать

IllegalArgumentException\n\s*at\s+(.+)(?:(?:\n\s*at(?!\s*com\.test).*)*(?:\n\s*at\s+((com\.test[^(\n]*).*)(?:\n\s*at.*)*\n\s*at\s+(?!\3)(com\.test.*))?)?

См. Демоверсию regex

Подробности

  • IllegalArgumentException- строка
  • \n\s* - новые строки и 0+ пробелы
  • at\s+ - at и 1+ пробелы
  • (.+) - Группа 1: перваяat строка
  • (?:\n\s*at(?!\s*com\.test).*)* - строки, начинающиеся с отступа at, которые не имеют test.com после at
  • \n\s*at\s+ - строка, начинающаяся с отступа at и1+ пробелы
  • ((com\.test[^(\n]*).*) - группа 2: строка com.test с частью перед (, включенной в группу 3
  • (?:\n\s*at.*)* - 0 или более строк, начинающихся с at
  • \n\s*at\s+(?!\3) - перенос строки, пробелы 1+, at, пробелы 1+ и текст не может быть таким, как в группе 3, сразу после
  • (com\.test.*) - группа 4: com.test и остальная часть линии.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...