LINUX.ORG.RU

Проблема с группой в регулярке

 


0

1

Есть текст:

static void OutClass::OurMethod(int a)
static void OurFunction(int b)

Надо получить:
OutClass::OurMethod(int a)
OurFunction(int b)

То есть, надо оставить имя C++ метода или функции и все что правее, а возвращаемый тип пропустить.

Я использую регулярку https://regex101.com/r/oax6bm/1:
\w+(::)?.*\(.*\)

И она не работает. Она матчит весь текст.

Проблема в кванторе вопроса ? для группы (::). Если его убрать, то для строки с OutMethod матчинг сработает правильно. Но двойное двоеточие может либо быть, либо не быть, поэтому я использую квантор ?. И с ним все ломается.

Как исправить?

★★★★★

Как исправить?

Прекратить парсить исходный код регулярками и воспользоваться нормальным парсером.

Siborgium ★★★★★
()
Ответ на: комментарий от Xintrea

.* - максимально возможный шаблон.

.*? - минимальный возможный шаблон.

vel ★★★★★
()
Ответ на: комментарий от Xintrea

Неправильно, пропуск на

static void f(int a)

так как фактически 2 символа требуешь

так лучше

\w+(::\w+)?\(.*\)
Psilocybe ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.