2

-String に、ある程度の数字、 a {、何もない/何らかの文字列、 a }、ある程度の数字、および finalが含まれているかどうかを判断する正規表現を作成しようとしてい-ます。例えば:

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

4 に答える 4

2

私は自分の質問に答えることができるようです... どうやら{} 正規表現の特殊文字です\\。しかたがない。

于 2015-01-19T01:45:02.927 に答える
0

パターンは

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

これは主に記号{の横にある文字が原因です。+正規表現で+は、前のトークンを 1 回以上繰り返しますが、反復量指定子は、中括弧{start,end}内に指定された範囲に従って前のトークンを繰り返します。{}したがって、正規表現エンジンは{、 を反復量指定子の開始と見なし、これが失敗する原因+となります。{指定することはできませんが、指定o+{2}します(o+){2}。また、閉じ中括弧をエスケープする必要もありません。

于 2015-01-19T02:10:44.177 に答える