Я хочу разобрать следующий код Lua:
[1]={['x']=198;['y']=74;['width']=99;['height']=199;};[2]={['x']=82;['y']=116;['width']=82;['height']=164;};
Обратите внимание, что в таблице есть два ключа: [1]
а также [2]
, Я хочу получить только значение для [1]
ключ. Как я могу это сделать? Я пробовал следующее:
cmatch res;
regex rx("\\[(.*)?\\]=\\{(.*)?\\};(.*)");
regex_search(lua_table.c_str(), res, rx);
Но он все еще жадный: он соответствует всему тексту.
Вы делаете свои группы захвата необязательными, помещая ?
вне их. Вместо этого поместите их в группы (.*?)
для не жадного совпадения для первых двух группировок и обратитесь к группе захвата #2
для результата матча.
\\[(.*?)\\]=\\{(.*?)\\};(.*)
Вы можете использовать lookahead и lookbehind, чтобы соответствовать всем символам, которые присутствуют внутри {}
фигурные скобки, только если за закрывающей фигурной скобкой следует ;
и любой персонаж,
(?<=\\{)(.*?)(?=\\};.)
Это то же самое, что и @ hwnd, с чуть более подробной информацией.
# [1]={['x']=198;['y']=74;['width']=99;['height']=199;};[2]={['x']=82;['y']=116;['width']=82;['height']=164;};
# ** Grp 0 - ( pos 0 , len 108 )
# [1]={['x']=198;['y']=74;['width']=99;['height']=199;};[2]={['x']=82;['y']=116;['width']=82;['height']=164;};
# ** Grp 1 - ( pos 1 , len 1 )
# 1
# ** Grp 2 - ( pos 5 , len 47 )
# ['x']=198;['y']=74;['width']=99;['height']=199;
# ** Grp 3 - ( pos 54 , len 54 )
# [2]={['x']=82;['y']=116;['width']=82;['height']=164;};
# "\\[(.*?)\\]=\\{(.*?)\\};(.*)"
\[
( .*? ) # (1)
\]
=
\{
( .*? ) # (2)
\}
;
( .* ) # (3)