`
Luob.
  • 浏览: 1573483 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之 25天 正则表达式(一)

阅读更多
正则表达式,匹配,切割,替换


/**
 * 正则表达式:符合一定规则的表达式
 *  作用:用户专门操作字符串.
 *  特点:用一些特定的符号来表示一些代码操作.这样就简化了代码书写.
 *  学习正则表达式,就是在学习一些特殊符号的使用
 *  好处:可以简化对字符串的复杂操作
 *  弊端: 符号定义越多,正则越长,阅读新越差.
 *  
 *  具体操作功能
 *  1.匹配的工作 String  matches()方法; 
 *    用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
 *  
 *  2.切割: String split()
 *  
 *  3.替换: replace()  replaceAll()
 *  
 *  
 *
 */
public class RegexDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//checkqq();
		//demo();
		
		//System.out.println((char)11);  //男性的生物表示图标
		
		//splitDemo1("张三.李四...王武...招六.sunba.xiaqi","\\.+");
		//splitDemo1("c:\\abc\\a.txt","\\\\"); 
		
		String str="1356420773000|2012121245|2589712|20.00|0.60";
		splitDemo1(str,"\\|");
		
		System.out.println("叠词分割");
		//按照叠词切割  \n:表示 捕获组, (*) 表示作为不获组
		//为了让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出现都有编号
		//从1开始,想要使用组可以通过\n(n就是组的编号)的形式来获取
		//判断组有多少个,就看多有多少个左括号, 编码呢,也是 从左变开始  1,然后 2,然后 ....
		//举例   ((())()) : 有4组 , (1(2(3))(4)):
		str="qiokknooloqqqnsdfhhdzzzzjf";
		splitDemo1(str,"(.)\\1+");   // kk qq  oo  hh zz 
		
		
		System.out.println("---------替换----------");
		str="wer23413132231st1551564sdfsd56f1565641416121sdf";
		replaceAllDemo(str,"\\d{5,}","#");  //连续 5个以上的数字 替换成 # 
		
		//替换叠词
		str="qiokknooloqqqnsdfhhdzzzzjf";
		replaceAllDemo(str,"(.)\\1+","&");  //将叠词 替换 与 符号
		//将叠词 替换成 "$"
		replaceAllDemo(str,"(.)\\1+","\\$");  //将叠词 替换 与 符号
		//将叠词 替换成  单个字符  zzzz--->z  qq-->q
		replaceAllDemo(str,"(.)\\1+","$1");  //使用  "$" 和编号,获取 前面匹配中的组
		
		
		
		
	}
	public static void replaceAllDemo(String ostr,String regex,String nstr){
		ostr=ostr.replaceAll(regex, nstr);
		System.out.println(ostr);
	}
	
	//简单的
	public static void splitDemo1(String str,String regex){
	/*	String str="张三.李四...王武...招六.sunba.xiaqi";
		str="c:\\abc\\"
		String reg="\\.+"; *///按照多个  点进行切割  "." 是正则中的特殊字符,需要转义  \.  ;但是 \ 也需要转移
 		String[] arr=str.split(regex);
		for (String s : arr) {
			System.out.println(s);
		}
	}
	
	//简单的
	public static void splitDemo(){
		String str="张三,李四,王武,招六,sunba,xiaqi";
		String reg=",";
		String[] arr=str.split(reg);
		for (String s : arr) {
			System.out.println(s);
		}
	}
	
	
	/**
	 * 校验手机号
	 * 手机号段只有 13xxx 15xxx 18xxx
	 */
	public static void checkMobile(){
		String tel="";
		String telReg="1[358]\\d9";
		System.out.println(tel.matches(telReg));
	}
	
	
	/**
	 * java 中正则表达式中 "\" 要成对出现
	 */
	public static void demo(){
		String str="b9";
		String reg="[a-zA-Z]\\d?";
		boolean b=str.matches(reg);
		System.out.println(b);
	}
	
	/**
	 * 使用正则表达式
	 */
	public static void checkqq(){
		String qq="1323123312";
		
		String regex="[1-9][0-9]{4,14}";
		boolean flag=qq.matches(regex);
		if(flag)
			System.out.println(qq+".... is  ok");
		else
			System.out.println(qq+".... no no no");
	}
	/**
	 * 对QQ号码进行校验
	 * 要求 :5~15 0 不能开头,只能是数字
	 * 
	 * 这种方式,使用String类中的方法,进行组合完成了需求,但是代码过于复杂
	 */
	public static void checkQQ(){
		String qq="1234234121612312";
		
		int len=qq.length();
		if(len>=5 && len<=15){
			if(!qq.startsWith("0")){
				/*char[] arr=qq.toCharArray();
				boolean flag=true;
				for (char c : arr) {
					
					if((c>='0' && c<='9')){
						flag=false;
						break;
					}
				}
				if(flag){
					System.out.println("QQ:"+qq);
				}else{
					System.out.println("QQ出现非法字符");
				}*/
				try{
					long l=Long.parseLong(qq);
					System.out.println("QQ:"+qq);
				}catch(NumberFormatException e){
					System.out.println("QQ出现非法字符");
				}
				
			}else{
				System.out.println("不可以是0开头");
			}
		}else{
			System.out.println("QQ长度错误");
		}
		
		
	}
	
	
}


正则 获取

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式的第四个功能.
 * 4.获取: 将字符穿中 符合规则的 子串 取出 
 * 
 * 操作步骤:
 *  1. 将正则表达式 封装成对象 
 *  2. 让正则对象和要操作的字符串关联
 *  3. 关联 后获取正则匹配引擎
 *  4. 通过 引擎 对符合规则的子串 进行操作 比如 取出 
 * 
 *    
 *
 */
public class RegexDemo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		getDemo();
	}
	
	public static void getDemo(){
		String str="123456";
		str="ming tian jiu yao fang jia la.";
		
		String regex="[1-9]\\d{4,14}";
		regex="\\b[a-z]{3}\\b";
		
		//1.将 规则 封装 成对象 
		Pattern p=Pattern.compile(regex);
		
		//2.让正则对象 和 字符串 关联
		Matcher m=p.matcher(str); //获取匹配其 引擎
		
		//其实  String类中的matches方法,用的就是Pattern和 Matcher 对象来完成
		//只不过,被String的方法封装后,用起来简单,但是 功能单一.
		//想要使用 更多复杂的对象的时候 ,就要找 Pattern 和 Matcher 对象
		//System.out.println(m.matches());  
		
		//还有很多 String 没有封装的方法 
	/*	boolean flag=m.find();//将规则作用到字符串上,并进行符合跪着的子串查找
		System.out.println(flag);
		System.out.println(m.group());  //用户获取匹配后的结果,但是得先找下
		*/
		System.out.println("matchers:"+m.matches());//作用于整个字符串,返回 false 发现会影响 后面 group的查找, 改变了 查找的索引
		while(m.find()){
			System.out.println(m.group());
			System.out.println(m.start()+"..."+m.end());//包含头 ,不包含 尾
		}
		
	}

}

0
1
分享到:
评论

相关推荐

    正则表达式教程

    zA-Z0-9]+\\.[x|X][m|M][l|L]$26 中文字符的正则表达式:[\u4e00-\u9fa5]27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))28 空白行的正则表达式:\n\s...

    Java基础班毕向节链接

    亲测可用,总共右5天,覆盖Java基本内容。从基本语法到网络编程和正则表达式。

    java范例开发大全源代码

     实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符串缓存类 143  实例107 提取单个字符 144  实例108 给指定字符赋值 145  实例109 插入新的...

    Java范例开发大全 (源程序)

     实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符串缓存类 143  实例107 提取单个字符 144  实例108 给指定字符赋值 145  实例109 插入新的字符 146...

    java范例开发大全

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...

    Java范例开发大全(全书源程序)

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 ...

    java范例开发大全(pdf&源码)

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...

    21天学通Oracle

    第21章 Oracle中的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) ...

    asp.net知识库

    一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其...

    易语言程序免安装版下载

    修改BUG:超级列表框在属性“整行选择”为真时,鼠标单击第一列右面也会导致第一列中的选择框被选中或取消选中。 21. 修改BUG:Sqlite3数据库支持库中“Sqlite数据库.取错误文本()”返回的文本是UTF-8编码(应是GB...

    freemarker总结

    JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: &lt;#if condition&gt;... &lt;#elseif condition&gt;... &lt;#elseif condition&gt;......

    MySQL5.1参考手册官方简体中文版

    3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用...

    mysql5.1中文手册

    根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序...

    mysql官方中文参考手册

    3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用...

    MYSQL中文手册

    3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2...

    MySQL 5.1参考手册中文版

    3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. ...

    MySQL 5.1参考手册

    3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用...

    MySQL 5.1参考手册 (中文版)

    3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用...

Global site tag (gtag.js) - Google Analytics