我想解析以下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);
但它仍然贪婪:它匹配整个文本。
答案 0 :(得分:3)
您可以将?
置于其外部,从而使您的捕获组成为可选项。相反,将它们放在组(.*?)
中以获得前两个分组的非贪婪匹配,并参考捕获组#2
以获得匹配结果。
\\[(.*?)\\]=\\{(.*?)\\};(.*)
答案 1 :(得分:1)
答案 2 :(得分:0)
这与@ 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)