我正在编写一个 txt 数据库文件到 sql 转换器,我需要拆分行中的项目。问题是在这些项目中可能有可以包含多个逗号的脚本(它们是 db 结构中的分隔符)。好消息是,脚本嵌套在 {}-s 中,因此它使工作类似于解析 csv 文件。唯一的问题是脚本本身可以容纳更多嵌套在 {}-s 中的脚本,这会阻止我的公式工作..
txt 数据库的结构:
501,Red_Potion,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(45,65),0; },{},{}
502,Orange_Potion,Orange Potion,0,200,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(105,145),0; },{},{}
503,Yellow_Potion,Yellow Potion,0,550,,130,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(175,235),0; },{},{}
504,White_Potion,White Potion,0,1200,,150,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(325,405),0; },{},{}
我用来匹配分隔符以进行拆分的正则表达式:
,(?![^{}]*\})
这可以正常工作,直到它对抗更复杂的嵌套脚本项,例如:
1492,Velum_Glaive,Vellum Glaive,4,20,,4500,250,,3,0,0x00004082,7,2,34,4,95,1,5,{ bonus2 bAddRace,RC_DemiHuman,80; if(getrefine()>=6) { bonus2 bSkillAtk,"LK_SPIRALPIERCE",100; bonus2 bSkillAtk,"KN_SPEARBOOMERANG",50; } if(getrefine()>=9) { autobonus2 "{ bonus bShortWeaponDamageReturn,20; bonus bMagicDamageReturn,20; }",100,2000,BF_WEAPON|BF_MAGIC,"{ specialeffect2 EF_REFLECTSHIELD; }"; } },{},{}
那么如何使它只匹配 db 结构分隔符并将脚本中的逗号排除在外?
提前致谢!:)