{aa = xx bb = yy}和{aa = xx}的正则表达式模式

时间:2013-07-27 11:27:45

标签: java regex

我想创建一个可以选择{aa=xx bb=yy}{aa=xx}

的正则表达式模式

这就是我在代码中使用的内容。

Pattern pattern = Pattern.compile("([{])(aa=\\S+)\\s*(bb=\\S+)?([}])");
final Matcher matcher = pattern.matcher(str);

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用命名捕获:

Pattern pattern = Pattern.compile("\\{(?<k1>[^=]+)=(?<v1>[^\\s}]+)(?>\\s+(?<k2>[^=]+)=(?<v2>[^}]+))?}");

然后在命名组中获取键和值(k1 v1 k2 v2)。

注意:将空格放在带有第二个键/值的可选组中更好,避免测试。

另一种方法是,如果在大括号内有不确定数量的键/值对:

Pattern pattern = Pattern.compile("(?:\\{|\\G)([^=\\s]+)=([^\\s}]+)(?:\\s*|})");

(我假设=周围没有空格,您可以根据需要添加它们)

答案 1 :(得分:0)

一个小改进:您可以省略使用字符类捕获组以逃避特殊字符:只使用\{代替([{])\}而不是([}]) }。