javaの正規表現まとめ

#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+)?        -->括弧内は０個または１個
	 *
	 */
	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+             |     数字１つ以上          |                |
| \\\\d?             |     数字０個　１個　          |                |
| \\\\d*             |     数字０個　１個以上　          |                |
| \\\\d{5}             |     数字5個　          |                |
| \\\\d{5,10}             |     数字5個以上10個以下　          |                |
| \\\\d{5,}             |     数字5個以上　          |                |

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


#[サンプルコード](https://github.com/YanHengGo/java/tree/master/07_RegularExpression)