4

私はこの正規表現を持っています:

[^0-9!a-zA-z#\\$%&'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~@\\.]+

を使用してメールアドレスを分割しようとしています

[Email]info@emerycommunications.com

しかし、Java の次のコード:

String fileStr = "[Email]info@emerycommunications.com";

String invalidCharacters = "[^0-9!a-zA-z#\\$%&'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~@\\.]+";

String[] tokens = fileStr.split(invalidCharacters);

for (String token:tokens) {
    if (token.contains("@")) {
        System.out.println(token);
    }
}

この出力を提供しています:

[Email]info@emerycommunications.com

私はinvalidCharacters可変カバー[として]もまったく無知です。

4

2 に答える 2

7

文字クラスにありA-z、角括弧文字は大文字の Z と小文字の a の間に ASCII (および Unicode) の順序で配置されています。したがって]、無効な文字ではなく有効な文字と見なされています-おそらく、A-Z代わりに意味したのでしょう。

于 2012-11-25T22:49:54.723 に答える
4

この正規表現:

[^0-9!a-zA-z#\$%&'\*\+\-/=\?\^_`\{\|\}~@\.]+

角かっこで囲まれたものを除く任意の文字の少なくとも 1 つ以上の数に一致します。角括弧自体は文字セットの一部ではありません。これらのバックスラッシュのほとんどは不要です。ハイフン以外のバックスラッシュ文字は、文字クラス内で特別なものではありません。

ただし、大文字から小文字A-zまでの範囲があるため、小文字が2回あるだけでなく、との間にあるすべての文字、つまり、、、、、および. これが、括弧が否定された文字クラスに入る方法です。 A zZa[\]^_`

それが意図したものではない場合、この正規表現が探しているものかもしれません:

[^0-9!a-zA-Z#$%&'*+=?^_`{|}~@.-]+

(ハイフンを最後に移動すると、バックスラッシュは必要ありません)

于 2012-11-25T22:50:19.153 に答える