#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をグループ化 |