正则表达式找到四个没有关闭支架的开放式支架

时间:2013-08-23 22:19:39

标签: regex

我正试图在我的.less文件中找到嵌套4级以上的所有地方,而不会被关闭。

以下是我目前正在使用Rubular的地方: http://rubular.com/r/a6uWyH0mUv

如果您希望在SO上看到示例:

ul {
    width:100%;
    li {
        width: 25%;
        a {
            color: @blue;
            span {
                font-weight: normal;
            }
        }
    }
}

ul {
    width:100%;
    li {
        width: 25%;
        a {
            color: @blue;
        }
    }
}

ul {
    width:100%;
    li {
        width: 25%;
    }
}

ul {
    width:100%;
}

我想要匹配的唯一一个是第一个具有4个嵌套css属性的测试字符串。

通过各种实验,我已经能够非常接近,但我仍然最终匹配不应该被正则表达式捕获的部分字符串。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

[{][^}]*[{][^}]*[{][^}]*[{](.*)应该可以解决问题。

答案 1 :(得分:0)

.*?(?:\{[^}]*?){4}(.*?\})

.*? makes sure to find the first one, not really necessary
(?:\{[^}]*?) finds 4 opening brackets without closing ones
(.*?\}) capturing group until the first closing bracket.

如果这不完全符合您的要求,可以轻松修改。

在评论中解决您的请求:

.*?(?:\{[^}]*?){4}(.*?)\} 

只会为您提供括号内的文字(font-weight: normal;)。我所做的就是从捕获组中移除右括号。

.*?(?:\{[^}]*?){3}(\n[^\n]*?\{.*?\})

将解决您的第二个请求。请注意,这种方式非常严重,我认为它不会在所有情况下都能正常工作。我推荐第一个,或者稍微修改一下。

至于Sublime Test 2中的崩溃,我不确定我是否可以提供帮助 - 这对我有用!