Регулярное выражение для захвата первого матча всего между двумя двоеточиями - PullRequest
0 голосов
/ 24 марта 2020

Учитывая эту строку:

Equinox: *spamReceiveTask: Mar 17 12:34:39.264: #CAPWAP-3-DTLS_CONN_ERR: capwap_ac.c:934 00:3a:9a:30:f5:90: DTLS connection not found forAP 192.168.99.74 (43456), Controller: 192.168.99.2 (5246) send packet

Я хочу сопоставить все между равноденствием: и следующим двоеточием. Таким образом, мое совпадение должно быть * spamReceiveTask

Я пробовал это: ^.*\bEquinox:([^:]+):

, но оно совпадает как Equinox: *spamReceiveTask:

Я также пробовал смотреть вперед и назад, но это соответствовало всем вещам между всеми точками с запятой в строке. Я хочу сопоставить только символы между первыми двумя двоеточиями, за исключением исключенных.

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Используя утверждение lookbeh и lookahead, попробуйте:

(?<=Equinox:)[^:]+(?=:)
0 голосов
/ 24 марта 2020

Ваше регулярное выражение в порядке, и оно работает. Я полагаю, что проблема в языковых утилитах c regex, и, вероятно, вы используете их неправильно; ваш желаемый результат находится в группе захвата 1;

проверьте приведенный ниже фрагмент кода, записанный в javascript, и используйте match () с вашим шаблоном;

let sample = `Equinox: *spamReceiveTask: Mar 17 12:34:39.264: #CAPWAP-3-DTLS_CONN_ERR: capwap_ac.c:934 00:3a:9a:30:f5:90: DTLS connection not found forAP 192.168.99.74 (43456), Controller: 192.168.99.2 (5246) send packet`;

//only the first complete match and its related capturing groups are returned as an array
let pattern = /^.*\bEquinox:([^:]+):/
let matchAndCaptureGroup = sample.match(pattern);
let captureGroup = matchAndCaptureGroup[1];
console.log("without global flag: ", captureGroup);

//------------------------------------------
//with global flag, capturing group is not return
//only the matched strings will return
pattern = /^.*\bEquinox:([^:]+):/g
let matchOnly = sample.match(pattern)[0];
console.log("with global flag: ", matchOnly);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...