我正在尝试制作一个正则表达式,以确定一个字符串是否包含-
,一些数字,一个{
,一个/一些字符序列,一个}
,一些数字位数和最终-
。例如:
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)
我使用的是我不知道我正在使用的正则表达符号吗?我已经检查了,但我不认为 - ,{,或}有资格作为正则表达式符号......
答案 0 :(得分:2)
看起来我可以回答我自己的问题......显然{
和}
是正则表达式中的特殊字符,你必须使用{{1}来逃避它们}。哦,好吧。
答案 1 :(得分:0)
模式应为
.*-\\d+\\{.*\\}\\d+-.*
答案 2 :(得分:0)
String.matches("*-\\d+\\{.*}\\d+-.*");
这主要是因为{
符号旁边的+
字符。我们都知道,在正则表达式中,+
重复前一个标记一次或多次,其中重复量词{start,end}
根据{}
花括号内给出的范围重复前一个标记。因此,正则表达式引擎将{
视为重复量词的开始,并+
导致此失败之前{
。我们无法指定o+{2}
,但我们会(o+){2}
。而且你也不需要逃避最后的大括号。
答案 3 :(得分:0)
模式将是:
^.*[-]\\d+\\{.*\\}\\d+[-].*$
谢谢,