Java常用API(三)Pattern 正则表达式


1. 一个用于指定规则的类

正则Regex , 在java中正则形成了一个单独的包 java.util.regex , 代表正则的类 --- Pattern
正则表达式本质上适用于指定匹配或筛选规则的一系列表达式 。

2. matches(regex)

[ ] : 表示一个字符。  [abc]  匹配a\b\c中任意一个字符

- : 用于表示范围 。  [a-z]  匹配a~z中任意一个字符

^ : 表示过滤。      [^a]  匹配除a意外任意字符

. : 表示任意一个字符。  [ .] 匹配任意一个字符  ,若想匹配一个"."  则需要转义,java中用\表示后面的字符需要转义,在正则表达式中"\"也需要转义,所以"\\."表示匹配一个"."。

\d : 表示匹配 一个数字 。 

\D :表示匹配一个非数字。

\s: 表示匹配一个空白字符。

\S : 表示匹配一个非空白字符

\w : 表示匹配一个单词字符

+ : 表示至少出现一次。  "a.+" 匹配以"a"开头至少有两个字符组成的字符串。

* :表示可有可无。 "a.*" 匹配以"a" 开头 的任意字符串。

? : 表示出现0或1次 "a.?" 匹配以"a"开头最多有两个字符组成的字符串 。

{ } : 表示出现次数".{5}"  表示由5个字符组成的字符串;".{5,}" 表示至少由5个字符组成的字符串 ;".{5,10}" 表示由5~10个字符组成的字符串。

补充:\r回车:光标移至初始位置    \n 换行 : 光标移至下一行    JDK1.7以后不再区分。

() : 表示一盒捕获组  ".*(abc).*" 匹配含有abc的字符串。捕获组会自动编号,下次想使用时可用编号"\\1"”引用。 ".*(abc).*\\1.*" 匹配含有与两个abc的字符串。捕获组编号规则:(第一的出现的位置开始计算。 匹配叠字: "(.)\\1+"    ;匹配ABAB格式的字符串 :"(..)\\1

注意:"(.){2}" 表示出现两次,内容可以不同      "(.)\\1" 表示出现两次,内容必须相同 。

 练习: 1.匹配小数

2. 匹配邮箱

3. 匹配密码 :6~12位 ,至少有小写字母、大写字母、数字、符号中的三种组成。 

 	/**
	 * 匹配小数
	 * */
	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()));
			}
	}

补充: 二十四个常用正则表达式(摘自:http://www.jb51.net/article/34155.htm)

  1. 只能输入数字:"^[0-9]*$"。
  2. 只能输入n位的数字:"^\d{n}$"。
  3. 只能输入至少n位的数字:"^\d{n,}$"。
  4. 只能输入m~n位的数字:。"^\d{m,n}$"
  5. 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
  6. 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
  7. 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
  8. 只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
  9. 只能输入非零的负整数:"^\-[1-9][]0-9"*$。
  10. 只能输入长度为3的字符:"^.{3}$"。
  11. 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
  12. 只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
  13. 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
  14. 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
  15. 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
  16. 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
  17. 验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
  18. 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
  19. 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
  20. 验证InternetURL:"^http://%28[/\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
  21. 验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
  22. 验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
  23. 验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
  24. 验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值