Java: 正则表达式抛出 PatternSyntaxException .*-\\d+{.*}\\d+-.*
Java: PatternSyntaxException thrown with regex .*-\\d+{.*}\\d+-.*
我正在尝试制作一个正则表达式来确定字符串是否包含 -
、一些数字、{
、nothing/some 字符序列、}
、一些数字和最后的 -
。例如:
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)
我是否使用了我不知道自己正在使用的正则表达式符号?我检查过,但我认为 -、{ 或 } 不符合正则表达式符号的条件...
看来我可以回答我自己的问题...显然 {
和 }
是正则表达式中的 特殊字符,你必须转义它们\
。好吧。
模式应该是
.*-\d+\{.*\}\d+-.*
String.matches("*-\d+\{.*}\d+-.*");
主要是因为+
符号旁边的{
字符。我们都知道,在正则表达式中,+
重复前一个标记一次或多次,而重复量词 {start,end}
根据 {}
大括号内给定的范围重复前一个标记。因此,正则表达式引擎将 {
视为重复量词的开始,而 {
之前的 +
会导致此操作失败。我们不能指定 o+{2}
,但可以指定 (o+){2}
。而且你不需要转义右大括号。
模式将是:
^.*[-]\d+\{.*\}\d+[-].*$
谢谢,
我正在尝试制作一个正则表达式来确定字符串是否包含 -
、一些数字、{
、nothing/some 字符序列、}
、一些数字和最后的 -
。例如:
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)
我是否使用了我不知道自己正在使用的正则表达式符号?我检查过,但我认为 -、{ 或 } 不符合正则表达式符号的条件...
看来我可以回答我自己的问题...显然 {
和 }
是正则表达式中的 特殊字符,你必须转义它们\
。好吧。
模式应该是
.*-\d+\{.*\}\d+-.*
String.matches("*-\d+\{.*}\d+-.*");
主要是因为+
符号旁边的{
字符。我们都知道,在正则表达式中,+
重复前一个标记一次或多次,而重复量词 {start,end}
根据 {}
大括号内给定的范围重复前一个标记。因此,正则表达式引擎将 {
视为重复量词的开始,而 {
之前的 +
会导致此操作失败。我们不能指定 o+{2}
,但可以指定 (o+){2}
。而且你不需要转义右大括号。
模式将是:
^.*[-]\d+\{.*\}\d+[-].*$
谢谢,