标题不清楚,所以我写了一些样本来解释。
有一个字符串,其中包含许多嵌套的{}
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}
不起作用。
答案 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 */
}
}
假设转义的/
不是分隔符,我会进行复杂的分割。
这是你要找的东西吗?