2

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

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

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

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

如何使用 java 编写正则表达式来解析路径模式,找到{}没有 outer 的部分{}。对于这个例子,它应该是{<\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}

所以\\{.*\\}行不通。

4

2 回答 2

1

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

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

如果不够"\\{(.*)\\}"好,那么贪婪你会追求你所要求的整个表达方式。;)

编辑:

使用您编辑的问题,上面@aix 的评论是正确答案: 通过正则表达式查找没有外部“{}”的“{}”部分

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

于 2012-04-25T14:26:26.790 回答
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 */
    }
}

假设转义/符不是定界符,我在其中进行了复杂的拆分。

这是你要找的东西吗?

于 2012-04-25T16:09:17.593 回答