import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidationExample {
public static void main(String[] args) {
// ユーザーã‹ã‚‰ã®å…¥åŠ›ã‚’å—ã‘å–ã‚‹
Scanner scanner = new Scanner(System.in);
System.out.println("é›»åメールアドレスを入力ã—ã¦ãã ã•ã„:");
String email = scanner.nextLine();
scanner.close();
// é›»åãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ£è¦è¡¨ç¾ãƒ‘ターン
String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// æ£è¦è¡¨ç¾ãƒ‘ターンをコンパイル
Pattern pattern = Pattern.compile(emailRegex);
// 入力ã•ã‚ŒãŸæ–‡å—åˆ—ã¨æ£è¦è¡¨ç¾ã‚’比較
Matcher matcher = pattern.matcher(email);
// メッセージを表示
if (matcher.matches()) {
System.out.println("有効ãªé›»åメールアドレスã§ã™ã€‚");
} else {
System.out.println("無効ãªé›»åメールアドレスã§ã™ã€‚");
}
}
}
ã“ã®ä¾‹ã§ã¯ã€æ¨™æº–入力ã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰ã®é›»åメールアドレスをå—ã‘å–ã‚Šã€æ£è¦è¡¨ç¾ãƒ‘ターンを使用ã—ã¦æœ‰åŠ¹æ€§ã‚’æ¤œè¨¼ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€é›»åãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ£è¦è¡¨ç¾ã¯éžå¸¸ã«è¤‡é›‘ã§ã‚りã€å…¨ã¦ã®ã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã™ã‚‹ã“ã¨ã¯é›£ã—ã„ã§ã™ã€‚プãƒãƒ€ã‚¯ã‚·ãƒ§ãƒ³ç’°å¢ƒã§ã¯ãƒ©ã‚¤ãƒ–ãƒ©ãƒªã‚„ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã®æ©Ÿèƒ½ã‚’利用ã™ã‚‹ã‹ã€ã‚ˆã‚ŠåŽ³å¯†ãªæ£è¦è¡¨ç¾ãƒ‘ターンを考慮ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚
Patternクラス
java.util.regex.Pattern クラスã¯ã€æ£è¦è¡¨ç¾ãƒ‘ターンを表ã™ãŸã‚ã®ã‚¯ãƒ©ã‚¹ã§ã™ã€‚æ£è¦è¡¨ç¾ã¯ã€æ–‡å—列ã®ãƒ‘ターンマッãƒãƒ³ã‚°ã‚„検索ã€ç½®æ›ãªã©ã®æ–‡å—列æ“作を柔軟ã‹ã¤åŠ¹æžœçš„ã«è¡Œã†ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚Pattern クラスã¯ã€æ£è¦è¡¨ç¾ã‚’コンパイルã—ã€ãã®å¾Œã«ã“ã®ãƒ‘ターンを使用ã—ã¦æ–‡å—列æ“作を行ã„ã¾ã™ã€‚
以下ã¯ã€Pattern クラスã®ä¸»ãªãƒ¡ã‚½ãƒƒãƒ‰ã¨ãã®è§£èª¬ã§ã™:
compile(String regex):- パターンをコンパイルã—ã¾ã™ã€‚指定ã•ã‚ŒãŸæ£è¦è¡¨ç¾ãŒç„¡åйãªå ´åˆã€
PatternSyntaxExceptionãŒã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚
- パターンをコンパイルã—ã¾ã™ã€‚指定ã•ã‚ŒãŸæ£è¦è¡¨ç¾ãŒç„¡åйãªå ´åˆã€
matcher(CharSequence input):- 指定ã•ã‚ŒãŸæ–‡å—列ã«å¯¾ã™ã‚‹ãƒžãƒƒãƒãƒ£ãƒ¼ã‚ªãƒ–ジェクトを作æˆã—ã¾ã™ã€‚ã“ã®ãƒžãƒƒãƒãƒ£ãƒ¼ã‚ªãƒ–ジェクトã¯ã€ãƒ‘ターンã«åŸºã¥ã„ã¦æ–‡å—列上ã§ã®æ“作を行ã„ã¾ã™ã€‚
split(CharSequence input):- 指定ã•ã‚ŒãŸæ–‡å—列をパターンã«åŸºã¥ã„ã¦åˆ†å‰²ã—ã€
String[]é…列ã¨ã—ã¦è¿”ã—ã¾ã™ã€‚
- 指定ã•ã‚ŒãŸæ–‡å—列をパターンã«åŸºã¥ã„ã¦åˆ†å‰²ã—ã€
matches():- ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列全体ã«å¯¾ã—ã¦å®Œå…¨ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’判定ã—ã¾ã™ã€‚
find():- ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列内ã§éƒ¨åˆ†çš„ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’判定ã—ã¾ã™ã€‚見ã¤ã‹ã£ãŸå ´åˆã€æ¬¡ã«é€²ã¿ã¾ã™ã€‚
group():- æœ€å¾Œã«æˆåŠŸã—ãŸãƒžãƒƒãƒãƒ³ã‚°æ“作ã«ãŠã„ã¦ã€æŒ‡å®šã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ã®éƒ¨åˆ†æ–‡å—列をå–å¾—ã—ã¾ã™ã€‚
pattern():- コンパイルã•ã‚ŒãŸæ£è¦è¡¨ç¾ãƒ‘ターンをå–å¾—ã—ã¾ã™ã€‚
flags():- パターンã®ãƒ•ラグ(例: 大文å—ãƒ»å°æ–‡å—を区別ã™ã‚‹ã‹ã©ã†ã‹ï¼‰ã‚’å–å¾—ã—ã¾ã™ã€‚
Pattern クラスを使用ã™ã‚‹éš›ã«ã¯ã€ã¾ãš compile() ãƒ¡ã‚½ãƒƒãƒ‰ã§æ£è¦è¡¨ç¾ãƒ‘ターンをコンパイルã—ã€ãã®å¾Œã€matcher() メソッドã§å¯¾è±¡ã¨ãªã‚‹æ–‡å—列ã«å¯¾ã™ã‚‹ãƒžãƒƒãƒãƒ£ãƒ¼ã‚ªãƒ–ジェクトをå–å¾—ã—ã¦æ“作を行ã„ã¾ã™ã€‚æ£è¦è¡¨ç¾ã«ã¯ç‰¹å®šã®æ§‹æ–‡ãŒã‚ã‚Šã€æ…£ã‚Œã‚‹ã¾ã§å°‘ã—å¦ç¿’ãŒå¿…è¦ã§ã™ã€‚
Matcherクラス
Matcher クラスã¯ã€æ£è¦è¡¨ç¾ã«åŸºã¥ã„ã¦æ–‡å—列ã«å¯¾ã—ã¦ãƒ‘ターンマッãƒãƒ³ã‚°ã‚’行ã†ãŸã‚ã®ã‚¯ãƒ©ã‚¹ã§ã™ã€‚Matcher クラス㯠Pattern クラス㮠matcher() メソッドã«ã‚ˆã£ã¦å¾—ã‚‰ã‚Œã€æ¤œç´¢ã‚„ç½®æ›ãªã©ã®æ“作を行ã„ã¾ã™ã€‚
以下ã¯ã€Matcher クラスã®ä¸»ãªãƒ¡ã‚½ãƒƒãƒ‰ã¨ãã®è§£èª¬ã§ã™:
matches():- ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列全体ã«å¯¾ã—ã¦å®Œå…¨ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’判定ã—ã¾ã™ã€‚一致ã™ã‚‹å ´åˆã¯
trueã€ãã†ã§ãªã„å ´åˆã¯falseã‚’è¿”ã—ã¾ã™ã€‚
- ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列全体ã«å¯¾ã—ã¦å®Œå…¨ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’判定ã—ã¾ã™ã€‚一致ã™ã‚‹å ´åˆã¯
find():- ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列内ã§éƒ¨åˆ†çš„ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’判定ã—ã¾ã™ã€‚一致ã™ã‚‹å ´åˆã¯
trueã‚’è¿”ã—ã€æ¬¡ã«é€²ã¿ã¾ã™ã€‚次ã®ä¸€è‡´ãŒãªã„å ´åˆã¯falseã‚’è¿”ã—ã¾ã™ã€‚
- ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列内ã§éƒ¨åˆ†çš„ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’判定ã—ã¾ã™ã€‚一致ã™ã‚‹å ´åˆã¯
start():- æœ€å¾Œã«æˆåŠŸã—ãŸä¸€è‡´æ“作ã®é–‹å§‹ä½ç½®ï¼ˆã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ï¼‰ã‚’è¿”ã—ã¾ã™ã€‚
end():- æœ€å¾Œã«æˆåŠŸã—ãŸä¸€è‡´æ“作ã®çµ‚了ä½ç½®ï¼ˆã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ + 1)を返ã—ã¾ã™ã€‚
group():- æœ€å¾Œã«æˆåŠŸã—ãŸä¸€è‡´æ“作ã«ãŠã„ã¦ã€æŒ‡å®šã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ã®éƒ¨åˆ†æ–‡å—列をå–å¾—ã—ã¾ã™ã€‚ã‚°ãƒ«ãƒ¼ãƒ—ã¯æ£è¦è¡¨ç¾å†…ã®æ‹¬å¼§ã§æŒ‡å®šã•れãŸéƒ¨åˆ†ã§ã™ã€‚
groupCount():- æ£è¦è¡¨ç¾å†…ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®æ•°ã‚’è¿”ã—ã¾ã™ã€‚
Matcher クラスを使用ã™ã‚‹åŸºæœ¬çš„ãªæµã‚Œã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™:
Patternクラスã®compile()メソッドを使用ã—ã¦æ£è¦è¡¨ç¾ãƒ‘ターンをコンパイルã—ã€matcher()メソッドを呼ã³å‡ºã—ã¦Matcherオブジェクトを得ã¾ã™ã€‚Matcherオブジェクトã®ãƒ¡ã‚½ãƒƒãƒ‰ï¼ˆmatches()ã€find()ã€start()ã€end()ã€group()ãªã©ï¼‰ã‚’使用ã—ã¦ãƒ‘ターンマッãƒãƒ³ã‚°ã‚’実行ã—ã¾ã™ã€‚- å¿…è¦ã«å¿œã˜ã¦ã€ãƒ‘ターンãŒè¤‡æ•°å›žä¸€è‡´ã™ã‚‹å ´åˆã‚„ã€ã‚°ãƒ«ãƒ¼ãƒ—を利用ã™ã‚‹å ´åˆã¯ã€ãƒ«ãƒ¼ãƒ—ã‚„æ¡ä»¶åˆ†å²ã‚’使用ã—ã¦é©åˆ‡ãªå‡¦ç†ã‚’行ã„ã¾ã™ã€‚
Matcher ã‚¯ãƒ©ã‚¹ã¯æŸ”軟ã§å¼·åŠ›ãªæ–‡å—列æ“作をæä¾›ã—ã¾ã™ãŒã€æ£è¦è¡¨ç¾ã®ç†è§£ã¨ä½¿ã„æ–¹ãŒå¿…è¦ã§ã™ã€‚
æ£è¦è¡¨ç¾
æ£è¦è¡¨ç¾ï¼ˆRegular Expressionsã¾ãŸã¯Regex)ã¯ã€æ–‡å—列ã®ãƒ‘ターンを定義ã™ã‚‹ãŸã‚ã®ç‰¹æ®Šãªæ–‡å—列ã§ã™ã€‚ä¸»ã«æ–‡å—åˆ—ã®æ¤œç´¢ã€ç½®æ›ã€ãƒ‘ターンマッãƒãƒ³ã‚°ãªã©ã®æ–‡å—列æ“作ã«ä½¿ç”¨ã•れã¾ã™ã€‚Javaã§ã¯ã€java.util.regex ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã§æ£è¦è¡¨ç¾ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚
以下ã¯ã€æ£è¦è¡¨ç¾ã®åŸºæœ¬çš„ãªè¦ç´ ã¨ãã®è§£èª¬ã§ã™:
- æ–‡å—ã¨ãƒ¡ã‚¿æ–‡å—:
- ä¸€èˆ¬çš„ãªæ–‡å—ã¯ãã®ã¾ã¾ä½¿ã‚れã¾ã™ã€‚ãŸã ã—ã€ãƒ¡ã‚¿æ–‡å—ï¼ˆç‰¹æ®Šãªæ„味をæŒã¤æ–‡å—)ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã‹ã€ç‰¹å®šã®æ–‡è„ˆã§ä½¿ç”¨ã•れるã¨ç‰¹æ®Šãªæ©Ÿèƒ½ã‚’æŒã¡ã¾ã™ã€‚例ãˆã°ã€
.(ピリオド)ã¯ã©ã‚“ãªæ–‡å—ã«ã‚‚一致ã—ã¾ã™ãŒã€\.ã¨ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã¨å®Ÿéš›ã®ãƒ”リオドã¨ä¸€è‡´ã—ã¾ã™ã€‚
- ä¸€èˆ¬çš„ãªæ–‡å—ã¯ãã®ã¾ã¾ä½¿ã‚れã¾ã™ã€‚ãŸã ã—ã€ãƒ¡ã‚¿æ–‡å—ï¼ˆç‰¹æ®Šãªæ„味をæŒã¤æ–‡å—)ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã‹ã€ç‰¹å®šã®æ–‡è„ˆã§ä½¿ç”¨ã•れるã¨ç‰¹æ®Šãªæ©Ÿèƒ½ã‚’æŒã¡ã¾ã™ã€‚例ãˆã°ã€
- ã‚ャラクタクラス:
[ ]ã§æ‹¬ã‚‰ã‚ŒãŸä¸ã®æ–‡å—列ã¨ä¸€è‡´ã—ã¾ã™ã€‚例ãˆã°ã€[aeiou]ã¯æ¯éŸ³ã«ä¸€è‡´ã—ã¾ã™ã€‚
- 範囲指定ã®ã‚ャラクタクラス:
[a-z]ã®ã‚ˆã†ã«ç¯„囲を指定ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ã“ã®ä¾‹ã¯å°æ–‡å—ã®ã‚¢ãƒ«ãƒ•ァベットã«ä¸€è‡´ã—ã¾ã™ã€‚
- å¦å®šã®ã‚ャラクタクラス:
[^0-9]ã¯æ•°å—以外ã«ä¸€è‡´ã—ã¾ã™ã€‚
- ワイルドカード:
.(ピリオド)ã¯ã©ã‚“ãª1æ–‡å—ã«ã‚‚一致ã—ã¾ã™ã€‚
- 釿Œ‡å®šå:
*ã¯ç›´å‰ã®æ–‡å—やグループãŒ0回以上繰り返ã™ã“ã¨ã‚’示ã—ã€+ã¯1回以上ã€?ã¯0回ã¾ãŸã¯1回ã§ã™ã€‚
- グルーピング:
( )ã§æ‹¬ã‚‰ã‚ŒãŸéƒ¨åˆ†ã¯ä¸€ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¨ã—ã¦æ‰±ã‚れã¾ã™ã€‚例ãˆã°ã€(ab)+㯔ab”〔abab”〔ababab”ãªã©ã«ä¸€è‡´ã—ã¾ã™ã€‚
- アンカー:
^ã¯æ–‡å—列ã®å…ˆé ã«ä¸€è‡´ã—ã€$ã¯æ–‡å—åˆ—ã®æœ«å°¾ã«ä¸€è‡´ã—ã¾ã™ã€‚
- エスケープ:
- 特殊文å—ã‚’ãã®ã¾ã¾æ¤œç´¢ã™ã‚‹ãŸã‚ã«ã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥
\を使ã„ã¾ã™ã€‚例ãˆã°ã€\.ã¯ãƒ”リオド自体ã«ä¸€è‡´ã—ã¾ã™ã€‚
- 特殊文å—ã‚’ãã®ã¾ã¾æ¤œç´¢ã™ã‚‹ãŸã‚ã«ã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥
Javaã§ã¯æ£è¦è¡¨ç¾ã‚’使用ã™ã‚‹ãŸã‚ã«ã€Pattern クラス㨠Matcher ã‚¯ãƒ©ã‚¹ãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚ã“れらã®ã‚¯ãƒ©ã‚¹ã‚’使用ã—ã¦æ£è¦è¡¨ç¾ã‚’コンパイルã—ã€æ–‡å—列ã¨ä¸€è‡´ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚æ£è¦è¡¨ç¾ã¯éžå¸¸ã«å¼·åŠ›ã§æŸ”軟ãªãƒ„ールã§ã‚りã€åŠ¹æžœçš„ãªæ–‡å—列æ“作やãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã«åˆ©ç”¨ã•れã¾ã™ã€‚
「013 クラスライブラリã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント