Java:使用正则表达式抛出PatternSyntaxException。* - \\ d + {。*} \\ d + - 。*

时间:2015-01-19 01:38:24

标签: 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]+-.*"),但在每种情况下我都会得到PatternSyntaxException(两者都在下面):

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 5
.*-\d+{.*}\d+-.*
 ^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.matches(Unknown Source)
at java.lang.String.matches(Unknown Source)
at conv.Congine.qual(Congine.java:17)
at conv.Congine.convert(Congine.java:5)
at conv.Main.main(Main.java:6)

~

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 7
.*-[\d]+{.*}[\d]+-.*
   ^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.matches(Unknown Source)
at java.lang.String.matches(Unknown Source)
at conv.Congine.qual(Congine.java:17)
at conv.Congine.convert(Congine.java:5)
at conv.Main.main(Main.java:6)

我使用的是我不知道我正在使用的正则表达符号吗?我已经检查了,但我不认为 - ,{,或}有资格作为正则表达式符号......

4 个答案:

答案 0 :(得分:2)

看起来我可以回答我自己的问题......显然{} 是正则表达式中的特殊字符,你必须使用{{1}来逃避它们}。哦,好吧。

答案 1 :(得分:0)

模式应为

.*-\\d+\\{.*\\}\\d+-.*

答案 2 :(得分:0)

String.matches("*-\\d+\\{.*}\\d+-.*");

这主要是因为{符号旁边的+字符。我们都知道,在正则表达式中,+重复前一个标记一次或多次,其中重复量词{start,end}根据{}花括号内给出的范围重复前一个标记。因此,正则表达式引擎将{视为重复量词的开始,并+导致此失败之前{。我们无法指定o+{2},但我们会(o+){2}。而且你也不需要逃避最后的大括号。

答案 3 :(得分:0)

模式将是:

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

谢谢,