找到正则表达式没有外部`{}`的`{}`部分

时间:2012-04-25 14:21:01

标签: java regex

标题不清楚,所以我写了一些样本来解释。

有一个字符串,其中包含许多嵌套的{} s:

 /users/{<\w{2,4}\d{3}>id}

你可以看到我使用{}作为路径变量的占位符,它可以在里面有正则表达式,也可以有{}

如何使用java编写正则表达式来解析路径模式,找到没有外部{}的{​​{1}}部分。对于此示例,它应为{}

感谢〜

更新

给出的例子太简单了,可以是:

{<\w{2,4}\d{3}>id}

结果应为:

/users/{<\w{2,4}\d{3}>id}/{action}/{<\w{2,4}\d{3}>targetId}

所以{<\w{2,4}\d{3}>id} {action} {<\w{2,4}\d{3}>targetId} 不起作用。

2 个答案:

答案 0 :(得分:1)

你会遇到/users/{regex1}/{regex2}这样的情况吗?

如果是,在这种情况下,"\\{.*\\}"将返回"{regex1}/{regex2}"。 :(

如果不是"\\{(.*)\\}"已经足够好了,那么你会贪婪地找到你要求的整个表达方式。 ;)

编辑:

根据您编辑的问题,上面@aix的评论是正确答案: Find the `{}` part which doesn't have outer `{}` by regex

他指出你的问题与那里解决的问题类似:Regular Expression to match outer brackets

答案 1 :(得分:0)

也许我误解了你的榜样。但是,你的第二个例子是:

/users/{<\w{2,4}\d{3}>id}/{action}/{<\w{2,4}\d{3}>targetId}

结果应为:

{<\w{2,4}\d{3}>id}
{action}
{<\w{2,4}\d{3}>targetId}

您想要的{}是否总是在分隔/内?如果,那么,你可以通过拆分/然后只检查每个结果来做到这一点很简单:

String test = "/users/{<\\w{2,4}\\d{3}>id}/{action}/{<\\w{2,4}\\d{3}>targetId}";
String[] pieces = test.split("(?<!\\\\)/");
for (String piece : pieces) {
    if (piece.matches("^\\{.*")) {
        /* do whatever */
    }
}

假设转义的/不是分隔符,我会进行复杂的分割。

这是你要找的东西吗?