5

助けが必要です。私は得ています:

Caused by: java.util.regex.PatternSyntaxException: Unclosed character class near index 24
^[a-zA-Z└- 0-9£µ /.'-\]*$
                        ^
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.clazz(Pattern.java:2254)
        at java.util.regex.Pattern.sequence(Pattern.java:1818)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)
        at java.util.regex.Pattern.<init>(Pattern.java:1133)
        at java.util.regex.Pattern.compile(Pattern.java:823)

これが私のコードです:

String testString = value.toString();

Pattern pattern = Pattern.compile("^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'-\\]*$");
Matcher m = pattern.matcher(testString);

私は xhtml を使用しているため、一部には unicode 値を使用する必要があります。

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

20

\and -and notを一致させたいと仮定すると]:

Pattern pattern = Pattern.compile("^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'\\\\-]*$");

\正規表現のエスケープ文字でもあるように、バックスラッシュを二重にエスケープする必要があります。したがって\\]、Java ではバックスラッシュをエスケープしますが、正規表現ではエスケープしません。\2 番目の Java-escaped を正規表現エスケープするには、別の Java-escaped を追加する必要があります\

そのため\\\\、Java エスケープの後\\、正規表現は にエスケープされ\ます。

シーケンスの最後に移動-するということは、Pshemo が指摘した範囲演算子ではなく、文字として使用されることを意味します。

于 2013-01-18T00:53:24.510 に答える
2

あなたが何を達成しようとしているのかを言うのは難しいですが、あなたの正規表現には奇妙なことがいくつか見られます:

  1. 文字のクラスを開きましたが、閉じたことはありません。代わりに、通常の文字 \\]にするものを使用しました。]
    • ]文字クラスに含めたい場合は]、最後に次のように追加する必要があります"^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'-\\]]*$"
    • \文字クラスに含めたい場合は、\\\\バージョンを使用する必要があります。これは、正規表現エンジンと Javas String で、その特別な意味を 2 回エスケープする必要があるためです。
  2. またはのような文字の範囲を指定するために使用される文字クラスで-( ) を使用しました。その特別な意味をエスケープするには、使用する必要があります'-\\]a-zA-Z\\-
于 2013-01-18T00:46:31.357 に答える