не захватывающая группа в регулярных выражениях - PullRequest
1 голос
/ 22 февраля 2020

Это моя строка:

Исправление

Обновление кодеков до версии 3.6.5 или выше.

Ссылки

GitHub Commit

Это мое регулярное выражение:

(?=Remediation)[^\n]*[\s\S]*?(?=References|$)

Match Вывод:

Исправление Обновление кодеков до версии 3.6.5 или выше.

Мне не нужен заголовок (" Исправление " ) в выходной. Я поместил ?= в группу, но пока это не работает.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

В вашем паттерне вы начинаете с (?=, который является положительным прогнозным прогнозом.

Один из вариантов - обновить паттерн, чтобы изменить его на позитивный. Вы можете опустить [^\n]*, так как следующие [\s\S]*? также будут ему соответствовать.

(?<=Remediation)[\s\S]*?(?=References)

Regex demo

Другой вариант - сопоставить Remedations и захватить в сгруппируйте все строки, которые не начинаются с ссылок, без отрицательного взгляда.

\bRemediation\s*\r?\n((?:(?!References).*)+)

Regex demo

0 голосов
/ 22 февраля 2020
(?:Remediation\s*)([\s\S]*?)(?:\s+References)

сделает свое дело. (? :) не захватывает. Вы также, вероятно, не хотите захватывать пробелы после исправления или перед ссылками, поэтому я добавляю \ s * в группы без захвата. demo

или за комментарий вы можете исключить синтаксис без захвата и просто сделать:

Remediation\s*([\s\S]*?)\s+References

demo

здесь вы берете группу 1

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