Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对花括号和数字的java正则表达式_Java_Regex - Fatal编程技术网

针对花括号和数字的java正则表达式

针对花括号和数字的java正则表达式,java,regex,Java,Regex,我需要一个正则表达式,它将只匹配包含零个或多个部分的字符串到花括号和零个或多个数字中。花括号可以包含任何字符。但在花括号外,只允许使用数字 我要匹配的字符串如下所示: "34{yy}1232{blabla}" "{blabla}{xx}34{seq}" 我尝试使用此表达式,但效果不理想: "([0-9]|(\\{(.*)\\}))+" 你的正则表达式不起作用的原因是克莱恩星的贪婪。以您提供的示例为例: string: {blabla}{xx}34{seq} regex: {

我需要一个正则表达式,它将只匹配包含零个或多个部分的字符串到花括号和零个或多个数字中。花括号可以包含任何字符。但在花括号外,只允许使用数字

我要匹配的字符串如下所示:

 "34{yy}1232{blabla}"

 "{blabla}{xx}34{seq}"
我尝试使用此表达式,但效果不理想:

   "([0-9]|(\\{(.*)\\}))+"

你的正则表达式不起作用的原因是克莱恩星的贪婪。以您提供的示例为例:

string: {blabla}{xx}34{seq}
regex:  {      (.*)       }
因此,.*尽可能匹配

现在,如果您想捕获每一个数字和每一个用大括号括起来的部分,您应该使正则表达式不贪婪。您可以使用*?操作人员正则表达式可能是这样的:

([0-9]+|\\{(.*?)\\})+
导致:

string: {blabla}{ x x } 34   {seq  }
regex:  { (.*?)}{(.*?)}[0-9]+{(.*?)}

增加了解释使用的空间。

您的预期输出是什么?您的意思是?@geo:应该如何处理层叠的花括号?例如Foo{Bar{Qux}FooBar}Qux}我猜您希望每个大括号内的内容分别匹配。首先,使用非贪婪*匹配括号内的内容-*?不是*定义,但它不按预期工作。您的正则表达式似乎工作正常,但我会将.*改为[^\\d{}]*以防止{…}内的数字和{}匹配。