Почему следующее регулярное выражение не работает в C с использованием regcomp
У меня есть следующее регулярное выражение, чтобы соответствовать последнюю пару фигурных скобок в строке,
.+(?={)(.+)(?=})
Пример строки
abc{abc=bcd}{gef=hij}
Я хочу содержимое внутри последних фигурных скобок (gef=hij) внутри захваченной группы. Это работает в тестере регулярных выражений, доступном в сети
Когда я использую regcomp для компиляции того же регулярного выражения, это не так. Есть идеи?
int reti = regcomp(®ex, ".+(?={)(.+)(?=})", REG_EXTENDED);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
2 ответа
Решение
Тем не мение, regcomp
использует POSIX BRE или ERE, которые не поддерживают прогнозирование или прогнозирование.
.+{(.+)}
Возьмите нужную строку из индекса группы 1.
Использует привязку, чтобы указать шаблон должен совпадать, когда в конце строки.
(?<=[{]).*(?=[}]$)