2014-01-09 3 views
0

У меня есть эта строка журнала:Regex для разбора определенных полей файла журнала

[email protected], Portal, qtp724408050-38, com.blabla.search.lib.SearchServiceImpl  .logRequest, [Input request is lookupRequestDTO] 

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

В настоящее время мое регулярное выражение захватывает всю строку:

([\w-\.]+)@gmail.com,(.+)lookupRequestDTO 

Как ничего не сопрягать между электронной почтой и lookupRequestDTO?

+0

Какой язык вы используете? Добавьте '' – brandonscript

ответ

0

Предполагая, что вы используете PCRE (PHP, Perl и т.д., и это должно работать в JavaScript):

([\w-\.][email protected]\.com),(?:.+)(lookupRequestDTO) 

Из захвата групп 1 и 2, вы получите:

СПИЧКА 1

  1. [email protected]
  2. lookupRequestDTO

Рабочий пример: http://regex101.com/r/yW9eU3

+0

Мне нужно всего лишь электронное письмо и lookupRequestDTO и много после этого. Это в основном примерная линия, которая намного длиннее. – Butcho

+0

Тогда это регулярное выражение даст вам именно это;) – brandonscript

+0

Это слишком много захватывает ... (?:. +). Он захватывает последний экземпляр lookupRequestDTO в строке. Мне нужно, чтобы он игнорировал все, что было между электронной почтой и первым lookupRequestDTO, и игнорировать все после. – Butcho

0

Что об этом?

([^,]+).*?lookupRequestDTO 

[^] + соответствует всё, вплоть до первой запятой, так что вы должны получить по электронной почте

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

([^,]+).*?\[Input request is ([^\]]+) 
Смежные вопросы