2

次の正規表現を文字列に適用したい。Grant Skinners Regexr で正常に動作し、http://www.regexplanet.com/advanced/java/index.html (大文字と小文字を区別するセット) でも正常に動作しますが、Java はそれを飲み込みません。while ループにヒットすることはありません。これが私のコードです:

public static void main(String args[]) {
   final String testString =
      "lorem upsadsad asda 12esadas test@test.com asdlawaljkads test[at]test" +
      "[dot]com test jasdsa meter";
   final Pattern ptr =
      Pattern.compile(
         "^[A-Z0-9\\._%+-]+(@|\\s*\\[\\s*at\\s*\\]\\s*)[A-Z0-9\\.-]+" +
         "(\\.|\\s*\\[\\s*dot\\s*\\]\\s*)[a-z]{2,6}$",
         Pattern.CASE_INSENSITIVE);

    try {
        final Matcher mat = ptr.matcher(testString);
        while (mat.find()) {
            final String group1 = mat.group(1);
            System.out.println(group1);
            final String group2 = mat.group(2);
            System.out.println(group2);
            final String group3 = mat.group(3);
            System.out.println(group3);
        }
    } catch (final Exception e) {
        e.printStackTrace();
    }
}
4

3 に答える 3

0

正規表現を単純化するために、最初に [at] と [dot] を実際の文字に置き換えます。次に、次のような標準の電子メール正規表現を使用します。

matches("(?i)\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b");
于 2013-11-01T18:05:24.790 に答える