0

ラテン文字/UCS2 文字を受け入れる正規表現を作成しようとしています。しかし、それをしているときにエラーが発生します。次のコードでは、「text1」がパターンに合格する必要があります。私はまだこれに取り組んでいます。誰でもこれを修正するのを手伝ってもらえますか?

    String text1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz  !\"#$%&'()*+,-./:;<=>?@"
                    + "{|}~¡ ";
            String pattern = "^[a-zA-Z0-9\\*\\?\\$\\[\\]\\(\\)\\|\\{\\}\\/\\'\\#\\~\\.,;\"\\<=\\>-@%&!+:~¡   ]+$";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(text1);
    if (m.find()) {
            System.out.println("true");
    }
4

1 に答える 1

1

何が機能していませんか?パターンが一致していないか、エラー メッセージが表示されていますか?

最初に目にしたのは、エスケープする必要のない非常に多くの文字をエスケープしており、重要な文字がエスケープされていないことです。

文字クラスには、最初の位置にあるときに特別な意味[]-を持つ文字はわずかしかありません。^をエスケープしていません-。これによりエラーが発生する可能性があるため、次を試してください。

String pattern = "^[a-zA-Z0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿ ÄÅÆÇÉÑÖØÜßàäåæ èéìñòöøùü  ]+$";

次は: Unicode Properties/Scriptsを見てください。\\p{L}たとえば、任意の言語の文字を照合するために使用できます。

String pattern = "^[\\p{L}\\p{M}0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿]+$";

クラス持っていたすべての文字と一致します。

于 2013-05-07T06:41:45.140 に答える