2016-06-30 2 views
-2

У меня есть эти данные:REGEXP, поиск строки после того, как шаблон

Turning on API signature validation for service : PGL 
Turning off API signature validation for service : PLATFORM 
Turning off API signature validation for service : WEBWORKS 
Turning on API signature validation for service : TIMER_SINK 
Turning on API signature validation for service : MESSAGING 
Turning on API signature validation for service : EMAIL 
Turning off API signature validation for service : USER_SECURITY 
Initializing MDM for :USER_SECURITY 
<MDM/> 

Я хочу, чтобы поймать строку после службы: мне удалось сделать это: service.:.\K\w+

НО: Раньше я пытался делайте это с разным способом, который равен service:\s* ([^\n\r]*), но он возвращает мне мою ценность с сервисом. Я получил этот путь из этой статьи Regex to get the words after matching string и никаких больших эффектов.

Может кто-нибудь объяснить мне эту картину ([\n\r].*Object Name:\s*([^\n\r]*))

+0

Какой язык программирования вы используете в этих регулярных выражениях? – trincot

+0

Забыл добавить тег notepad ++. Мой плохой –

+1

Итак, у вас есть рабочий метод. В чем же тогда ваш вопрос? Поскольку в вашем тексте «Имя объекта» не встречается, это последнее регулярное выражение кажется совершенно не связанным с вопросом. Можете ли вы сосредоточиться на одном вопросе? – trincot

ответ

2
[\n\r].*Object Name:\s*([^\n\r]*) 

[\n\r] -> конец матча линии

.* -> соответствуют любому символу N раз

Object Name: -> Матч "Имя объекта:"

\s* -> матч N пробельные

[^\n\r]* -> любой символ, для новой строки, за исключением, N раз

Скобки как () определить соответствующие группы, поэтому во многих API вы будете использовать что-то вроде этого:

matchresult.at(0) = в Whol е матч

matchresult.at(1) = это то, что вы хотите, то есть символы, которые соответствуют [^\n\r]*

Таким образом, все символы между последним пробелом (последним белым пространством после «Имени объекта:») и конец строки.

+0

Спасибо! Наконец ... –

+0

Но да, в следующий раз, просто напишите последнюю строку своего сообщения, это будет проще: p – baddger964

0

Обновлено: Вы можете использовать следующее регулярное выражение:

(?<=:\s).* 

Demo and Explaination

+0

В блокноте ++ он дает мне услугу: USER_SECURITY и моя потребность - только USER_SECURITY. –

1
[\n\r].*Object Name:\s*([^\n\r]*) 

Давайте разбить его:

[\n\r] это соответствует новой линии. Оба \n и \r могут соответствовать новой строке в разных случаях. Иногда новая строка будет включать оба из них: \r\n. [\n\r] соответствует только одному из них, поскольку после квадратных скобок нет квантификатора.

. - соответствует всем, кроме новой линии. Значение * означает, что оно будет равно нулю до неограниченного времени. По умолчанию * жадный - т. Е. Он будет соответствовать как можно большему количеству раз.

Object Name: - соответствует буквально Object Name: - включая :.

\s соответствует каждому символу пробела, включая пробел, вкладку, новую строку и т. Д.* - то же самое до - ноль до неограниченного времени, жадный.

([^\n\r]*) - так как это в скобках, это будет «захвачено», т. Е. Это первая и единственная группа захвата в этом регулярном выражении. Это означает, что если вы захотите использовать это позже взамен, вы можете получить к нему доступ с помощью $1.

[] - квадратные скобки используются для списка допустимых символов. В этом случае, поскольку у нас есть специальный символ ^, это будет список запрещенных символов. Таким образом, [^\n\r]* будет означать, что он будет соответствовать всем, кроме новой строки - от нуля до неограниченного времени. Разница с выражением .* заключается только в том случае, если включен многострочный поиск, где . также может соответствовать новой строке.

 Смежные вопросы

  • Нет связанных вопросов^_^