Java 找到不'的{}部分;正则表达式不能有外部“{}”

Java 找到不'的{}部分;正则表达式不能有外部“{}”,java,regex,Java,Regex,标题不清楚,所以我写了一些示例来解释 有一个字符串,其中包含许多嵌套的{}s: /users/{<\w{2,4}\d{3}>id} 结果应该是: {<\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} {id} {action} {targetId} 因此,\{.\\\}不

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

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

 /users/{<\w{2,4}\d{3}>id}
结果应该是:

{<\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}
{id}
{action}
{targetId}

因此,
\{.\\\}
不起作用。

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

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

如果不是
“\{(.*\}”
就足够了,贪婪的你会追求你想要的整个表达式

编辑:

对于您编辑的问题,上面@aix的评论是正确的答案:


他指出你的问题与那里解决的问题相似:

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

在这里,我加入了一个复杂的拆分,假设转义的
/
不是分隔符


这就是你要找的东西吗?

你需要使用正则表达式吗?它越来越接近解析器的领域,如果您使用的正则表达式引擎能够处理所需的反引用量,那么为{}手工制作一个简单的匹配器应该会容易得多,这正是我要问的问题。第二个示例中的预期输出是什么?@Oscar,更新,谢谢。第一个由懒惰的正则表达式解决,第二个由贪婪的正则表达式解决。正如
Dervall
指出的那样,手工编写的解析器将正确地完成这项工作。正则表达式不适合这里。根据给定的用例
/users/{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}
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 */
    }
}