2014-11-28 6 views
0

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

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

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

abc{abc=bcd}{gef=hij} 

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

http://regexpal.com/

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

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

Какой язык вы используете? –

ответ

1

Во всяком случае, regcomp использует POSIX BRE или ERE, который не поддерживает смотреть вперед или смотреть-сзади.

.+{(.+)} 

Grab строка, которую вы хотите от индекса группы 1.

DEMO

+0

По-прежнему не удается скомпилировать с помощью regcomp –

+0

, вы попробовали этот '. + {(. +)}'? На каком языке вы работаете? –

+0

Hi Avinash, все ваши решения правильные, но для их компиляции с использованием regcomp скобки (для группировки) необходимо заменить квадратными скобками. Затем они компилируются просто отлично. Пожалуйста, измените, и я приму ваш ответ. Я использую C –

-1

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

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

+0

Look-behind/forward не поддерживается в POSIX ERE/BRE – nhahtdh

 Смежные вопросы

  • Нет связанных вопросов^_^