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+[-].*$