码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA正则

时间:2015-07-27 19:01:08      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

 

package regular;

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

/*
 正则表达式:符合一定规则的表达式
 作用:用于专门操作字符串
 特点:用一些特定的符号来表示一些代码的操作,这样就简化书写。
 所以学习正则表达工,就是在学习一些特殊符号的使用
 好处:可以简化对字符串的复杂操作。
 弊端:符号定义越多,正则越长,阅读性越差

 
 具体操作功能:
 1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
 */
public class RegexDemo {
	public static void main(String[] args) {
		checkQQ();
		demo();
		splitDemo("zhangsan,lishi,wangwu",",");//按照,进行切换
		splitDemo("zhangsan    lishi    wangwu"," +");//按照多个空格进行切割
		splitDemo("zhangsan.lishi.wangwu","\\.");//按照多个空格进行切割
		splitDemo("c:\\abc\\a.txt","\\\\");//去掉反斜杠
		splitDemo("erkktykkqqquio","(.)\\1+" );//按照叠词来完成切割
												//可以将规则封装成一个组,用()完成,组出现都有编号,从1开始,想要使用已有的组可以通过 
												//\n(n就是组的编号)的形式来获取
		replaceDemo("s  tr in  g"," +"," ");//将多个空格替换成一个空格 
		String str="wer1289980000ty12345654uiod12435676f";
		replaceDemo(str,"\\d{5,}","#");//将数字替换成#
		String str1="erkktyqqquizzzzzo";
		replaceDemo(str1,"(.)\\1+","&");//将叠词替换成&
		replaceDemo(str1,"(.)\\1+","$1");//叠词替换成一个,$1表示拿前一个规则的第一个组
		 getDemo();
	}
	/*
	 正则表达式的第四个功能
	 4.获取:将字符串的符合规则的子串取出
	 操作步骤:
	 1.将正则表达式封装成对象
	 2.让正则表达对象和要操作的字符串相关联
	 3.关联后,获取正则匹配引擎
	 4.通过引擎对符合规则的子串进行操作,比如取出
	 */
	public static void getDemo(){
		String str="ming jian jiu yao fang jia le ,da jia.";
		String reg="\\b[a-z]{4}\\b";
		//将规则封装成对象
		Pattern p =Pattern.compile(reg);
		//让正则表达对象和要操作的字符串相关联
		Matcher m=p.matcher(str);
		System.out.println(m.matches());
		//其实String类中的matches方法,用的就是 pattern和mattcher对象来完成的
		//只不过被String的方法封装后,用起来较为简单,但是功能单一
		boolean b=m.find();//将规则使用到字符串上,并进行符合规则的子串查找
		System.out.println(b);
		//System.out.println(m.group());//用于获取匹配后的结果
		//System.out.println("matchers:"+m.matches());
		while(m.find()){
			System.out.println(m.group());
			System.err.println(m.start()+"..."+m.end());
		}
	}
	//替换
	public static void replaceDemo(String str,String regex,String newStr){
		String s=str.replaceAll(regex,newStr);
		System.out.println(s);
	}
	//切割
	public static void splitDemo(String str,String regex){
		String[] arr=str.split(regex);
		for(String s:arr){
			System.out.println(s);
		}
	}
	//\\d 代表'\d'
	public static void demo(){
		String str="bc9999";
		String regex="[bcd][a-z]\\d+";//表示第一个字符只能是bcd中一个,且只有一字符,第二个字符只能是a-z
		boolean flag=str.matches(regex);
		System.out.println(flag);
		checkTel();
		
	}
	/*
	 匹配
	 手机号段只有 13xxx 15xxx 18xxx
	 */
	public static void checkTel(){
		String tel="13800000000";
		String telReg="1[358]\\d{9}";
		boolean b=tel.matches(telReg);
		System.out.println(b);
	}
	/*
	 正则验证QQ号码
	 */
	public static void checkQQ(){
		String qq="02121212";
		String regex="[1-9]\\d{4,14}";
		boolean flag=qq.matches(regex);
		if(flag){
			System.out.println("is ok...");
		}else{
			System.out.println("is nonono...");
		}
		
	}
	/*
	 对QQ号码进行校验
	 要求:5-15 0不能开头,只能是数字
	 这种方式:使用了String类中的方法,进行组合完成了需求 ,但是代码过于复杂
	 */
	public static void checkQQ_1() {
		String qq = "12345";
		int len = qq.length();
		if (len >= 5 && len <= 15) {
			if (!qq.startsWith("0")) {
				try{
					Long l=Long.parseLong(qq);
					System.out.println("qq:"+qq);
				}catch(NumberFormatException e){
					System.out.println("出现了非法字符");
				}
				
				/*char[] arr = qq.toCharArray();
				boolean flag = false;
				for (int x = 0; x < arr.length; x++) {
					if (!(arr[x] >= '0' && arr[x] <= '9')) {
						flag = true;
						break;
					}
				}
				if (!flag) {
					System.err.println("qq:" + qq);
				} else {
					System.out.println("qq号码中现了非法字符 ");
				}*/
			}else{
				System.out.println("不可以0开始");
			}
		}else{
			System.out.println("长度错误");
		}
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA正则

标签:

原文地址:http://blog.csdn.net/u012750578/article/details/47087757

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!