Java:PatternSyntaxException与regex一起抛出。*-\\d+;{.*}\\d+;-*

Java:PatternSyntaxException与regex一起抛出。*-\\d+;{.*}\\d+;-*,java,regex,string,match,patternsyntaxexception,Java,Regex,String,Match,Patternsyntaxexception,我试图创建一个正则表达式来确定一个字符串是否包含一个-、一些数字、一个{、一个空/一些字符序列、一个}、一些数字和一个最终的-。例如: gibberish-345{randomtext}938475-moregibberish ^&*^%^asdf-9897689{symbols$%&*}456-h6 -456{}456- 我尝试过使用String.matches(“*-\\d++.}\\d++-.*)和String.matches(*-[\\d]+.}[\\d]+-.*)

我试图创建一个正则表达式来确定一个字符串是否包含一个
-
、一些数字、一个
{
、一个空/一些字符序列、一个
}
、一些数字和一个最终的
-
。例如:

gibberish-345{randomtext}938475-moregibberish

^&*^%^asdf-9897689{symbols$%&*}456-h6

-456{}456-
我尝试过使用
String.matches(“*-\\d++.}\\d++-.*)
String.matches(*-[\\d]+.}[\\d]+-.*)”
,但在每种情况下,我都会得到一个
PatternSyntaxException
(它们都在下面):

线程“main”java.util.regex.PatternSyntaxException中的异常:索引5附近的非法重复 .*-\d+{.*}\d+-* ^ 位于java.util.regex.Pattern.error(未知源) 位于java.util.regex.Pattern.closure(未知源) 位于java.util.regex.Pattern.sequence(未知源) 位于java.util.regex.Pattern.expr(未知源) 位于java.util.regex.Pattern.compile(未知源代码) 位于java.util.regex.Pattern。(未知源) 位于java.util.regex.Pattern.compile(未知源代码) 位于java.util.regex.Pattern.matches(未知源) at java.lang.String.matches(未知源) 在conv.Congine.qual(Congine.java:17) 在conv.Congine.convert(Congine.java:5) 位于conv.Main.Main(Main.java:6) ~ 线程“main”java.util.regex.PatternSyntaxException中的异常:索引7附近的非法重复 .*-[\d]+{.*}[\d]+-* ^ 位于java.util.regex.Pattern.error(未知源) 位于java.util.regex.Pattern.closure(未知源) 位于java.util.regex.Pattern.sequence(未知源) 位于java.util.regex.Pattern.expr(未知源) 位于java.util.regex.Pattern.compile(未知源代码) 位于java.util.regex.Pattern。(未知源) 位于java.util.regex.Pattern.compile(未知源代码) 位于java.util.regex.Pattern.matches(未知源) at java.lang.String.matches(未知源) 在conv.Congine.qual(Congine.java:17) 在conv.Congine.convert(Congine.java:5) 位于conv.Main.Main(Main.java:6)
我使用的是我不知道正在使用的正则表达式符号吗?我已经检查过了,但我认为-、{或}不符合正则表达式符号的条件…

看起来我可以回答我自己的问题。。。显然,
{
}
是正则表达式中的特殊字符,您必须使用
\
对它们进行转义。哦,好吧。

模式应该是

.*-\\d+\\{.*\\}\\d+-.*
这主要是因为
{
符号旁边的
{
字符。我们都知道,在正则表达式中,
+
重复前面的标记一次或多次,其中作为重复量词的
{start,end}
根据
{}中给定的范围重复前面的标记
大括号。因此正则表达式引擎将
{
视为重复量词的开始,并在
{
导致失败之前将
{
视为重复量词的开始。我们无法指定
o+{2}
,但我们确实指定了
(o+{2}
。而且您不需要退出关闭的花括号。

模式将是:

^.*[-]\\d+\\{.*\\}\\d+[-].*$

谢谢,

你试过没有括号的
\\d+
吗?哦,我没有注意到……但是是的。
String.matches("*-\\d+\\{.*}\\d+-.*");
^.*[-]\\d+\\{.*\\}\\d+[-].*$