正则表达式匹配文本后跟大括号

时间:2017-10-25 15:39:43

标签: regex notepad++

我有这样的文字:

"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]"
}

第一个词总是“编辑”,但大括号中的行数和内容可能会有所不同。

2 个答案:

答案 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