регулярное выражение для захвата строки после регулярного шаблона строки - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужна помощь для регулярного выражения.

у нас есть следующая строка:

$ VAR = [1550181700, '"xyz (gmail.com)"', 'Hi Team,Пожалуйста, держитесь, имя хоста: kmkkmk.abc.com, имя задания: dat-inh-ndw-q9n580_prd106.f, имя задания: dat-inh-rdm-q9n717_jdapfrdly.b, имя задания: dat-inh-rdm-q9n717_jdapfrdly.С уважением, команда DSG ']

в приведенной выше строке, мне нужно захватить что-нибудь после "Имя работы:" и до следующей COMMA (,), что означает, что я должен получить список строк в качестве вывода, содержащий какниже: [dat-inh-ndw-q9n580_prd106.f, dat-inh-rdm-q9n717_jdapfrdly.b, dat-inh-rdm-q9n717_jdapfrdly.b]

примечание: мы не знаем, сколько раз "Иов"Имя: "может произойти в приведенной выше строке.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019
(?>Job Name: )([^,]*)

Захватывает эти 3 строки:

dat-inh-ndw-q9n580_prd106.f
dat-inh-rdm-q9n717_jdapfrdly.b
dat-inh-rdm-q9n717_jdapfrdly.b
0 голосов
/ 15 февраля 2019

Ну, это немного зависит от вашей инфраструктуры.По сути, ваш Regex будет выглядеть примерно так (предполагается синтаксис .NET):

"Job Name:\\s*([^,]*)"

Это будет захватывать строку «JobName:», за которой следует любое количество пробелов.Затем у нас есть группа захвата любого количества символов, которые не являются запятыми ([^,] *).Используя это, вы можете запустить соответствующий процесс, который даст вам все строки, которые вы хотите в первой группе захвата.

Вот тут и вступает инфраструктура. Нужно ли вам это в контексте .NET или JavaScriptили PHP, или что-то еще?Команды будут различаться в зависимости от используемой технологии.

ОБНОВЛЕНИЕ 1: (код Perl)

$s = "$VAR = [1550181700, '\"xyz (gmail.com)\" ', 'Hi Team,Please ON HOLD,HostName: kmkkmk.abc.com,Job Name: dat-inh-ndw-q9n580_prd106.f,Job Name: dat-inh-rdm-q9n717_jdapfrdly.b,Job Name: dat-inh-rdm-q9n717_jdapfrdly.b,regards,DSG Team']";

@jobNames = [];
while($s =~ /Job Name:\s*([^,]*)/gi) {
    push @jobNames, $1;
}

Это даст вам все имена, которые вам нужны в @массив jobNames.Однако, если вам нужно только регулярное выражение в качестве параметра для вашей функции, нам, вероятно, потребуется немного его изменить.

ОБНОВЛЕНИЕ 2: (с использованием утверждения lookbehind)

На самом деле вы можете искать так называемое утверждение о нулевой ширине.Он определяет образец для сопоставления, но НЕ включается в результат.Тогда регулярное выражение будет выглядеть так:

/(?<=Job Name: )[^,]*/

Конструкция (?<=...) указывает регулярному выражению совпадать только со следующим шаблоном, если ему предшествует то, что определено в скобках, в вашем случае «Job»Название: ".Однако это НЕ должно быть включено в результат.Таким образом, только остальная часть шаблона будет частью вашего результата.

ПРИМЕЧАНИЕ. Возможно, вы заметили, что я заменил конструкцию \s* после двоеточия на обычный пробел.Это связано с тем, что моя онлайновая игровая площадка на Perl вызвала ошибку «Переменная длина, не реализованная в регулярных выражениях» при использовании конструкции \ s *.Однако это может сработать в вашей реализации perl.Если вы уверены, что после двоеточия всегда будет ровно один пробел, вы можете просто пойти дальше и использовать один пробел.

0 голосов
/ 15 февраля 2019

Попробуйте регулярное выражение: Job Name: (?<job>[^,]*)

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