2

我正在尝试制作一个正则表达式来确定 String 是否包含 a -、一定数量的数字、 a {、什么都没有/一些字符序列、 a }、一定数量的数字和一个 final -。例如:

gibberish-345{randomtext}938475-moregibberish

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

-456{}456-

我试过使用String.matches("*-\\d+{.*}\\d+-.*")and 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

4 回答 4

2

看起来我可以回答我自己的问题......显然{并且} 正则表达式中的特殊字符,你必须用\\. 那好吧。

于 2015-01-19T01:45:02.927 回答
0

模式应该是

.*-\\d+\\{.*\\}\\d+-.*
于 2015-01-19T01:45:45.610 回答
0
String.matches("*-\\d+\\{.*}\\d+-.*");

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

于 2015-01-19T02:10:44.177 回答
0

模式将是:

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

谢谢,

于 2015-01-19T02:54:50.043 回答