質問: sc.nextLine(); if(line.matches("^.*¥w.*$") && line.matches("!¥w{3,}") && line.length() >= 6){ System.out.println("Valid"); }else{ System.out.println("Invalid"); } } }
回答: (1) line.matches("^.*¥w.*$") "\w" は "[a-zA-Z_0-9]" と同じですので, "英数字アンダースコアの何れかを含む" とマッチすると思います. (2) line.matches("!¥w{3,}") "!" は普通の文字ですので, "'!'の後に英数字アンダースコアの何れかが3文字以上続く" とマッチすると思います. (3) line.length() >= 6 6文字以上で true です. 結果的に「長さが 6 以上」以外は条件を満たす正規表現にはなっていないように思います. 過去に似たご質問がありましたので, 検索してご確認ください. "英字と数字の両方を含む" だけでもそれなりに面倒な記述になっていましたので, ~~いっそ java コードでチェックしたほうが簡単かもしれません.~~ ...と思ったのですが, 個別に matches するならそうでも無いかもしれませんね. 失礼しました.