Я порядочен с шаблонами регулярных выражений.Но сегодня я наткнулся на попытку создать шаблон, соответствующий конструкции объекта, например "new Class(..)"
в типичных исходных файлах C ++.К сожалению, оператор new
в C ++ имеет многократное использование.Например, я пытаюсь сопоставить его в следующем тексте
// This is the new connection object which does xyz and abc
Connection = new (xbt->length
+ sizeof(PVOID))
CCONECTION("ipaddress");
Шаблон регулярного выражения: (?<=new)(?s).*?CCONECTION
Приведенный выше шаблон не соответствует
new (xbt->length
^^^
+ sizeof(PVOID))
CCONECTION("ipaddress");
^^^
Вместо этого это соответствует
new connection object which does xyz and abc
^^^
Connection = new (xbt->length
+ sizeof(PVOID))
CCONECTION("ipaddress");
^^^
Есть ли способ, которым я могу жадно смотреть назад только на ближайшее «новое» слово перед CCONECTION?Я попробовал несколько вариантов просмотра, но не смог заставить его работать.
Я использую ripgrep с его поддержкой нескольких строк (-U), чтобы сопоставить приведенное выше регулярное выражение как rg -U "(?<=new)(?s).*?CCONECTION" --pcre2 -g a.txt