Java共通API(3)Pattern正規表現

4233 ワード

1.ルールを指定するクラス
正則Regex、javaの中で正則は1つの単独のパッケージjava.util.regexを形成して、正則のクラス---Patternを代表します
正規表現は、マッチングルールまたはフィルタルールを指定する一連の式に本質的に適用されます.
2. matches(regex)
[]:1文字を表します. [abc]  abcのいずれかの文字に一致
-:範囲を表します. [a-z]  a~zのいずれかの文字に一致する
^:フィルタリングを表します.     [^a]  a以外の任意の文字を一致させる
.:任意の文字を表します. [.]任意の文字に一致 ,「.」に一致するには は、エスケープが必要です.javaでは、後ろの文字をで表すにはエスケープが必要です.正規表現では「」もエスケープが必要です.したがって、「\.」は「.」に一致します.
d:一致する数字を表します. 
D:非数値に一致することを示します.
s:空白文字が一致していることを示します.
S:空白以外の文字が一致していることを示します
w:単語文字が一致していることを示します
+:少なくとも1回は表示されます. 「a.+」は、「a」で始まる少なくとも2文字の文字列に一致します.
* :あってもなくてもいいです.「a.*」は、「a」で始まる任意の文字列に一致します.
? : 表示0または1回 「a.?」は、「a」で始まる最大2文字の文字列に一致します.
{}:出現回数「.{5}」を表す 5文字からなる文字列を表す.「.{5,}」は、少なくとも5文字からなる文字列を表す.「.{5,10}」は、5~10文字からなる文字列を表す.
補足:rリターン:カーソルを初期位置に移動    改行:カーソルを次の行に移動   JDK 1.7以降は区別されません.
():キャプチャグループを表す 「.*(abc).*」はabcを含む文字列に一致します.キャプチャグループは自動的に番号付けされ、次に使用したい場合は「\1」で参照できます.「.*(abc).*\1.*」は、2つのabcを含む文字列に一致します.キャプチャグループ番号規則:(最初の出現位置から計算を開始します.一致する畳字:「(.)\1+」   ;ABAB形式に一致する文字列:"(.)\1
注意:「(.){2}」は2回現れることを表し、内容は異なることができる.     "(.)\1」は2回現れることを表し、内容は同じでなければならない.
 練習:1.小数に一致
2.メールボックスの照合
3.マッチングパスワード:6~12ビットで、少なくとも小文字、大文字、数字、記号の3つの構成があります. 
 	/**
	 *     
	 * */
	public static void regexsmallNum(String str){
		System.out.println(str.matches("0\\.\\d+")||str.matches("[1-9]\\d*\\.\\d+"));
	}
	/**
	 *     
	 * */
	public static void regexEmail(String str){
		System.out.println(str.matches("[0-9a-zA-Z]+_*[0-9a-zA-Z]*@[0-9a-zA-Z]+(\\.(com|cn)){1,2}"));
	}
	/**
	 *     
	 * 6~12        、  、  、      
	 * */
	public static boolean  regexPassword(String str){
		//        
		if(str ==null){
			return false;
		}
		//      
		 if(!str.matches(".{6,12}")){
			 return false;
		 }
		 int i = 0; //       
		 //          
		 if(str.matches(".*[a-z].*")){
			 i++;
		 }
		 //          
		 if(str.matches(".*[A-Z].*")){
			 i++;
		 }
		 //        
		 if(str.matches(".*[0-9].*")){
			 i++;
		 }
		 //        
		 if(str.matches(".*( ).*")){
			 i++;
		 }
		 //      
		 if(i>2){
			 return true;
		 }
		 return false;
	}

3. replaceAll("\d","-");   数値を「-」に置き換えます.
replace()は通常の文字または文字列のみを置き換え、replaceAll()は正規表現をサポートします.
練習:文字列の各文字の出現数を記録します.
/**
	 *                
	 * */
	public static void printNum(String str){
			int length = 0;
			while(str.length()>0){
				length = str.length();
				char c = str.charAt(0);
				str = str.replace(c+"", "");
				System.out.println(c+":"+(length - str.length()));
			}
	}

補足:24の一般的な正規表現(抜粋:http://www.jb51.net/article/34155.htm)
  • 数字のみ入力可能:「^[0-9]*$」.
  • はnビットの数字しか入力できません:"^d{n}$".
  • は少なくともnビットの数字しか入力できません:「^d{n,}$」.
  • m~nビットの数字しか入力できません:."^d{m,n}$"
  • はゼロとゼロ以外の先頭の数字しか入力できません:"^(0|[1-9][0-9]*)$".
  • は、「^[0-9]+(.[0-9]{2})?」という2桁の小数点の正実数しか入力できません.
  • は、「^[0-9]+(.[0-9]{1,3})?$」と1~3桁の小数しか入力できません.
  • はゼロ以外の正の整数しか入力できません:"^+?[1-9][0-9]*$".
  • はゼロ以外の負の整数しか入力できません:「^-[1-9][]0-9」*$.
  • は長さ3の文字しか入力できません:"^.{3}$".
  • には、26文字の英字文字列「^[A-Za-z]+$」しか入力できません.
  • には、26文字の大文字と小文字からなる文字列「^[A-Z]+$」しか入力できません.
  • では、26個の小文字の英字からなる文字列しか入力できません.「^[a-z]+$」.
  • には、数字と26文字の英字からなる文字列しか入力できません.「^[A-Za-z 0-9]+$」.
  • には、数字、26文字の英字または下線からなる文字列「^w+$」しか入力できません.
  • ユーザーパスワードの検証:「^[a-zA-Z]w{5,17}$」は、アルファベットで始まり、長さは6~18の間で、文字、数字、下線しか含まれません.
  • 検証^%&',;=?$"等文字:"[^%&',;=?$x 22]+".
  • 漢字のみ入力可能:"^[u 4 e 00-u 9 fa 5]{0,}$"
  • Emailアドレスを検証します:“^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”.
  • InternetURL:"^http://%28\w-]+.)+[w-]+(/[w-./?%&=]*)?$".
  • 電話番号の検証:"^((d{3,4}-)|d{3.4}-)?d{7,8}$"は、「XXX-XXXXXXXX」、「XXXX-XXXXXXXX」、「XXXX-XXXXXXXX」、「XXX-XXXXXXXXXX」、「XXXX-XXXXXXXXX」、「XXXXXXXXXXX」、および「XXXXXXXXXXXXXXX」の正しいフォーマットです.
  • 認証ID番号(15桁または18桁):「^d{15}|d{18}$」.
  • 検証1年の12ヶ月:"^(0?[1-9]|1[0-2])$"正しいフォーマットは「01」~「09」と「1」~「12」です.
  • 検証1ヶ月の31日間:"^((0?[1-9])|((1|2)[0-9])|30|31)$"の正しいフォーマットは、"01"~"09"と"1"~"31".