1

我有一个字符串:"stuffhere{@ name="productViewer" vars="productId={{id}}"}morestuff"

我怎样才能找到开头{和结尾之间的所有内容}

Pattern.compile("\\{@(.*?)\\}" + from, Pattern.DOTALL); //Finds {@ name="productViewer" vars="productId={{id}

如何验证结尾}没有在另一个之前或之后}?该字符串也可能被其他字符包围。

我希望正则表达式只返回: name="productViewer" vars="productId={{id}}"

4

4 回答 4

4

您可以使用此模式:

\\{@(.*)(?<!\\})\\}

(?<!..)是检查您的条件的负面回顾(前面没有}

请注意,右大括号不需要转义,您可以编写:

\\{@(.*)(?<!})}
于 2013-10-11T05:29:33.420 回答
0

试试这个:

 ^[^{]*\\{@(.*?)\\}[^}]*$
于 2013-10-11T05:35:25.523 回答
0

怎么样

(?<=[{])[^{}]+

我从来没有用过java,但正则表达式是国际的,不是吗:)

编辑:

等等...正则表达式有错误...

于 2013-10-11T05:37:05.523 回答
0

试试这个:

    String s = "stuffhere{@ name=\"productViewer\" vars=\"productId={{id}}\"}morestuff";
    Pattern p = Pattern.compile("\\{@\\s+(.*)\\}");
    Matcher m = p.matcher(s);
    if(m.find()){
        System.out.println(m.group(1));
    }
于 2013-10-11T05:50:05.520 回答