LoginSignup
2
2

More than 5 years have passed since last update.

javaの正規表現まとめ

Posted at

Stringによる正規表現

Stringによる正規表現 置換

*replaceAll //全対置換
*replaceFirst //最初置換

/**
 * アルファベット以外は除外する。
 * [^a-zA-Z]    -->アルファベット以外
 */
private static void testReplace() {
    String str = "fjslru7974294jlsjfJLJL+;]:@:UOIUO";
    String regex = "[^a-zA-Z]";
    System.out.println(str.replaceAll(regex, ""));
}
    //結果fjslrujlsjfJLJLUOIUO

Stringによる正規表現 分割

*split //分割

/**
 * 数字をで分けて配列にする。
 * [0-9]+    -->数字多数
 * \\d+      -->数字多数
 */
private static void testSplit() {
    String str = "jfslj47924fjslk24729djldja492824";
    String regex = "[0-9]+";
    System.out.println(Arrays.toString(str.split(regex)));
}
    //結果[jfslj, fjslk, djldja]

Stringによる正規表現 マッチング

*matches //マッチング

*小数の判断

/**
 * \\d+              -->数字多数個
 * \\.               -->.
 * (\\.\\d+)?        -->括弧内は0個または1個
 *
 */
private static void testMatchDouble() {
    String str = "10.5";
    String regex = "\\d+(\\.\\d+)?";
    if(str.matches(regex)) {
        System.out.println(Double.parseDouble(str));
    }else {
        System.out.println("double ではない");
    }
}

*日付の判断

/**
 * \\d{4}   -->数字4個
 * \\d{2}   -->数字2個
 * \\-      -->-
 */
private static void testMatchDate() {
    String str = "2019-09-10";
    String regex = "\\d{4}\\-\\d{2}\\-\\d{2}";
    if(str.matches(regex)) {
        try {
            System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }else {
        System.out.println("date ではない");
    }
}

*電話番号の判断

/**
 * \\d{10,12}   -->数字10-12個
 * \\d{3,5}     -->数字3-5個
 * -            -->-
 */
private static void testMatchTellphoneNumber() {
    String str = "080-1111-1111";
    String regex1 = "\\d{10,12}";
    String regex2 = "\\d{3,5}-\\d{3,5}-\\d{3,5}";
    if(str.matches(regex1) || str.matches(regex2)) {
        System.out.println(str);
    }else {
        System.out.println("電話番号 ではない");
    }
}

*Emailの判断

/**
 * \\w+                  -->アルファベット多数個
 * [a-zA-Z]              -->アルファベット多数個
 * @                     -->@
 * \\.                   -->.
 * \\-                   -->-
 * \\_                   -->_
 * [a-zA-Z0-9\\_\\-\\.]  -->アルファベットまたは_-.
 */
private static void testMatchEmail() {
    String str = "aaafsjkjfsk@a.b_c-d.com";
    String regex = "[a-zA-Z][a-zA-Z0-9\\_\\-\\.]{5,29}@[a-zA-Z0-9\\_\\-\\.]+\\.\\w+";

    if(str.matches(regex)) {
        System.out.println(str);
    }else {
        System.out.println("E-mail ではない");
    }
}

String正規表現と(Pattern、Matcher)正規表現の比較

String と pattern

private static void textPattern() {
    //文字列
    String string = "da646dad4da64da54d6a4d5a4d6a4d5ae78w";
    String regex = "[0-9]+";
    //pattern で分割
    Pattern pattern = Pattern.compile(regex);
    System.out.println(Arrays.toString(pattern.split(string)));
    //string で分割
    System.out.println(Arrays.toString(string.split(regex)));
}
    //結果[da, dad, da, da, d, a, d, a, d, a, d, ae, w]
       [da, dad, da, da, d, a, d, a, d, a, d, ae, w]

String と matcher

private static void testMatcher() {
    String str = "2019-09-10";
    String regex = "\\d{4}\\-\\d{2}\\-\\d{2}";
    //Matcher によるマッチング
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    System.out.println(""+ matcher.matches());
    //String によるマッチング
    System.out.println(""+str.matches(regex));
}
    //結果 true
           true

よく使う正規表現のまとめ

一文字

regex 意味 備考
abc abc
\\n 改行
\\t tab
[abc] aまたはbまたはc
[^abc] a,b,c以外
[a-zA-Z] アルファベット
[a-d[m-p]] a-dまたはm-p
\\d 数字
\\D 数字以外
\\w a-z A-Z と _ [a-zA-Z_]と同じ
\\W 上記以外

多数文字

regex 意味 備考
\\d+ 数字1つ以上
\\d? 数字0個 1個 
\\d* 数字0個 1個以上 
\\d{5} 数字5個 
\\d{5,10} 数字5個以上10個以下 
\\d{5,} 数字5個以上 

多数の判断

regex 意味 備考
XY 判断Xの後にY
X|Y 判断XまたはY
(X) 判断Xをグループ化

サンプルコード

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2