Почему следующее регулярное выражение не работает в C с использованием regcomp

У меня есть следующее регулярное выражение, чтобы соответствовать последнюю пару фигурных скобок в строке,

.+(?={)(.+)(?=})

Пример строки

abc{abc=bcd}{gef=hij}

Я хочу содержимое внутри последних фигурных скобок (gef=hij) внутри захваченной группы. Это работает в тестере регулярных выражений, доступном в сети

http://regexpal.com/

Когда я использую regcomp для компиляции того же регулярного выражения, это не так. Есть идеи?

int reti = regcomp(&regex, ".+(?={)(.+)(?=})", REG_EXTENDED);
if (reti) {
    fprintf(stderr, "Could not compile regex\n");
    exit(1);
}

2 ответа

Решение

Тем не мение, regcomp использует POSIX BRE или ERE, которые не поддерживают прогнозирование или прогнозирование.

.+{(.+)}

Возьмите нужную строку из индекса группы 1.

DEMO

Использует привязку, чтобы указать шаблон должен совпадать, когда в конце строки.

(?<=[{]).*(?=[}]$)

Другие вопросы по тегам