我有这样的文字:
"entity"
{
"id" "5040044"
"classname" "weapon_defibrillator_spawn"
"angles" "0 0 0"
"body" "0"
"disableshadows" "0"
"skin" "0"
"solid" "6"
"spawnflags" "3"
"origin" "449.47 5797.25 2856"
editor
{
"color" "0 0 200"
"visgroupshown" "1"
"visgroupautoshown" "1"
"logicalpos" "[-13268 14500]"
}
}
regex表达式只是在Notepad ++中选择该部分:
editor
{
"color" "0 0 200"
"visgroupshown" "1"
"visgroupautoshown" "1"
"logicalpos" "[-13268 14500]"
}
第一个词总是“编辑”,但大括号中的行数和内容可能会有所不同。
答案 0 :(得分:1)
editor\s*{\s*(?:\"[a-z]*\"\s*\".*\"\s*)*\}
Demo
还在Notepad ++中测试它可以正常工作
答案 1 :(得分:0)
在花括号之间找到所有内容的最简单方法是\{[^{}]*\}
(example 1)。
您可以在其上添加editor\s*
,以便将搜索范围限制为仅限该特定条目:editor\s*\{[^{}]*\}
(example 2)。
但是......如果editor {...}
中的任何键或值字符串包含{
或}
,则您将拥有edge cases。
您需要找到双引号值并基本上忽略它们。 This example显示了如何在群组中的第一个双引号之前停止,this example显示了如何匹配第一个键值对。
您基本上希望重复匹配这些键值对,直到no more remain。
如果您的密钥或值中包含\"
,例如"help" "this is \"quoted\" text"
,则需要查找\
个字符as well。
如果此组中有嵌套组,则需要递归处理这些组。但是,大多数正则表达式(包括Notepad ++)都不处理递归,所以为了解决这个问题,如果恰好遇到more nested {
,你可以复制粘贴到目前为止的代码内容。 }
。但是,这不会处理超过one level的嵌套。
<强> TL; DR 强>
对于Notepad ++,您可以使用a single line regex。