Java 实际应用中常用的正则表达式

1.正则表达式
jdk1.4 开始提供了正则表达式的支持;
java.util.regex
Pattern类:此类对象如果想要获得必须使用compile(),
此方法的功能式编译正则
Matcher类:通过Patern类取得;
2.正则标记
 1.所有的正则可以使用的标记都在java.util.regex.Pattern类里面定义了;
 2. 单个字符 (数量:1)
    字符:表示由一位字符所组成;
    \\  : 转义字符
    \t  :表示一个'\t'的符号;
    \n  :匹配换行(\n) 符号;
 3.字符集(数量:1)
  [abc] :表示可能是字符a,b,中的任意一位
  [^abc]:表示不是a,b,c中的任意一位
  [a-z]:所有的小写字母
  [a-zA-Z]:所有的字母
  [0-9]   :任意的一位数字
  4.简化的字符集表达式(数量:1)
  .  :表示任意一个字符
  \d :等价于[0-9]
  \D :非0-9的字符
   \s :表示任意的空白字符 如'\t','\n'
   \S :表示任意的非空白字符;
   \w :等价于[a-zA-Z0-9_] 表示由任意的字母,数字,-,组成
   \W :表示[^a-zA-Z0-9_]
   5.边界匹配(不要再java中使用,再javaScript中使用)
   ^:正则开始
   $:正则结束
   6.数量表达式
    正则?:表示此正则可以出现0次或1次
    正则+:表示此正则可以出现1次或1次以上;
    
    正则{n}:表示此正则可以出现n次
    正则{n,}:表示此正则出现n次以上(包含n次)
    正则{n,m}:表示此正则出现n次到m次
    
    7.正则1正则2 :正则1判断完成后继续判断正则2
       正则1|正则2 :正则1或正则2有一种满足则可
       (正则) 将多个正则作为一组,可以为这一组单独设置出先的次数
    
   String类对正则的支持
   jdk1.4 引入了正则的支持,Stirng类也添加了相应的支持
   matches(String regex) 正则验证,使用指定的字符串判断其是否满足给定的正则表达式的结构;
   replaceAll(String regx,String replacement)全部替换
   replaceFirst(String regx,String replacement)替换首个
   split(String regex)全部拆分;
   split(String regex,int limit) 部分拆分;
   
   

//将所有的非小写字母替换为"";
	String str="88drrrrr*RRE*&(33lslfWWWWabckdd";
	String pattern="[^a-z]";
	String replaceAll = str.replaceAll(pattern, "");
	System.out.println(replaceAll);//drrrrrlslfabckdd
	
	//根据数字拆分字母
	String str1="aaa55bb8888cc444444uuuuu55555uuKKKK";
	String pattern1="\\d+";
	String[] split = str1.split(pattern1);
	for (String string : split) {
		System.out.println(string);
	}
	//验证一个字符串是否式数字,如果是转为double
	String 	str3="1";
	String pattern3="\\d+(\\.\\d+)?";
	System.out.println(str3.matches(pattern3));
	//判断给定的字符串是不是一个ip地址 192.168.1.1 每一段最大长度是3
	String str4="192.168.1.1";
	String pattern4= "(\\d{1,3}\\.){3}\\d{1,3}";
	System.out.println(str4.matches(pattern4));
	
	//email
	/* 用户名由字母、数字、字母、下划线、点组成
	 用户名 必须以字母开头 可以以数字和字母结尾
	 长度不能超过30位
	 最后的根域名只能是.com ,.cn ,.net,.com.cn,.edu,.gov,.org*/
	String email="[email protected]";
	//开头[a-zA-Z]
	//中间段[a-zA-Z0-9_\\.]{0,28}
	//结尾[a-zA-Z0-9]
	//@
	//紧跟@后面的e \\w+
	// \\.
	//(net|cn|com|com\\.cn|net\\.cn|edu|gov|org)
	String pattern_email="[a-zA-Z][a-zA-Z0-9_\\\\.]{0,28}[a-zA-Z0-9]@\\w+\\.(net|cn|com|com\\\\.cn|net\\\\.cn|edu|gov|org)";
	System.out.println(email.matches(email));
	
	
	//字符串拆分
	String str_split="aa3333ddddd333ddlll33ll3";
	String reg="\\d+";
	Pattern compile = Pattern.compile(reg);
	String[] split2 = compile.split(str_split);
	System.out.println(Arrays.toString(split2));
	//字符串验证
	String str6="323237";
	String reg6="\\d+";
	Pattern p = Pattern.compile(reg);//编译正则
	Matcher matcher = p.matcher(str6);//进行正则匹配
	System.out.println(matcher.matches());//匹配的结果
	//String类本身支持了这两种操作,所有对String而言很少再去利用Pattern和Matcher类这两个类进行操作;
	//可以实现代码的最小化


    

//正则表达式
	 // java中'\'本身具有转义意义;如果要输出'\' 需要使用'\\'
	  // System.out.println("a\nb\\");
     String input1="hello ";
	 String pattern1="hello.";//.匹配任何一个字符  (hello后必须有一位)
	 //.(点)匹配除"\r\n"之外的任何单个字符;
	 System.out.println(Pattern.matches(pattern1, input1));

	 //手机号码(第一位是1,第二位是3,4,5,7,8,第三位则是0-9,第三位之后则是数字0-9)
	 String input2="17673195654";
	 String pattern2="^1(3|4|5|7|9)\\d{9}";
	 //  x|y 匹配x或y
	 //  ()圆括号表示分一组组
	 //  {}花括号表示出现的次数 ; +表示一个或多个; *表示零个或多个;?表示零个或一个;
	 //  {n} 表示匹配n次;{n,}至少匹配n次;{m,n}匹配至少m次,最多n次
	 // \\d数字字符匹配。等效于 [0-9]。
	 // '\\' 在java中'\'本身具有转义意义;如果要输出'\' 需要使用'\\'
	 //  '^'配输入字符串开始的位置
	 System.out.println(Pattern.matches(pattern2, input2));

	 //邮箱
	 //26个大小写英文字母表示为a-zA-Z
	// 数字表示为0-9
	 //下划线表示为_
	 //中划线表示为-
	// 由于名称是由若干个字母、数字、下划线和中划线组成,所以需要用到+表示多次出现
	 String input3="[email protected]";
	 String pattern3="^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+$";
	 System.out.println(Pattern.matches(pattern3, input3));
	 // [] 字符组/字符集
	  // \\. 匹配点
	 
	 //两位正整数
	 String input4="1";
	 String pattern4="^\\d{1,2}$";
	 System.out.println(Pattern.matches(pattern4, input4));

	 //数字 :大于等于0的数(整数和小数(保留两位))
	 String pattern5="^\\d+(\\.\\d{2}+)?$";
	 String input5="1.44";
	 System.out.println(Pattern.matches(pattern5, input5));

	 //数字(整数、负数、小数(保留两位小数))
	 String input6="-10.98";
	 String pattern6="^(\\-|\\+)?\\d+(\\.\\d{2}+)?$";
	 System.out.println(Pattern.matches(pattern6, input6));

	 //数字1-99之间的包含1和99的数
	 String input7="99";
	 String pattern7="^[1-9][0-9]?$";
	 System.out.println(Pattern.matches(pattern7, input7));
	 

猜你喜欢

转载自blog.csdn.net/qq_29393273/article/details/84552367