加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式基础

发布时间:2020-12-13 22:09:22 所属栏目:百科 来源:网络整理
导读:span style="font-size:18px;"package cn.itcast.test;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Demo1 {public static void main(String[] args) {/*//简单认识正则表达式System.out.println("abc".matches("..."));//.
<span style="font-size:18px;">package cn.itcast.test;

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

public class Demo1 {
	
	public static void main(String[] args) {
		/*
		//简单认识正则表达式
		System.out.println("abc".matches("..."));
		//.匹配字母
		*/
		/*p("abc".matches("..."));
		
		//d代表0-9的任何一个数组
		//replaceAll把所有的数字替换成-
		//在java中一个反斜杠()代表转义,//""-->输出为  规定d才代表0-9的任何一个数组
		//一定要注意d在java中是d
		p("a45678a".replaceAll("d","-"));
		
		
		//public static Pattern compile(String regex)
		//将给定的正则表达式编译到模式中。
		//把regex这个正则表达式编译下,放到Pattern这个模式中,编译好了,当你再拿这个字符串匹配的时候,速度回快一些
		Pattern pattern = Pattern.compile("[a-z]{3}");
		//[a-z]{3}-->代表三个字母,都是a-z范围
		Matcher matcher = pattern.matcher("dfg");
		//pattern这个模式匹配dfg这个字符串   
		//matcher  匹配方法   
		//Matcher  匹配器
		p(matcher.matches()); //匹配是否成功
		
		//27--33行的代码执行的速度快  36行慢些  没有编译
		p("dfg".matches("[a-z]{3}"));*/
		
		/*
		初步认识 . *  + ?
			. 一个字符
			* 匹配0次或多个字符,a*  就是匹配一个或多个a,匹配串必须都是a
			+ 匹配一个或多个字符
			?匹配0个或一个
			{}-->表示范围
			[]表示某一个字符的范围
		*/
		
		/*p("aaaa".matches("a.")); // false
		p("aaaa".matches("a*")); // true
		p("aaaa".matches("a+")); //true
		p("aaaa".matches("a?")); // false
		 */		
		p("a".matches("."));
		p("aa".matches("aa"));
		p("aaaa".matches("a*"));
		p("aaaa".matches("a+"));
		p("".matches("a*"));
		p("aaaa".matches("a?"));
		p("".matches("a?"));
		p("2321432456789765432".matches("d{3,100}"));//数字的长度在3到100之间
		p("192.168.0.aaa".matches("d{1,3}.d{1,3}"));
		p("192".matches("[0-2][0-9][0-9]"));
		
		/*
		 * 范围
		 * []只匹配一个字符
		 * ^ 代表非或除了什么以外的意思
		 * -  范围
		 * |  或
		 * && 并
		 * */
		p("a".matches("[abc]"));//取出中括号abc其中的一个与a进行匹配
		p("a".matches("[^abc]"));//除了a,b,c以外的字符与a进行匹配
		p("a".matches("[a-zA-Z]"));//所有的大小写字母与a进行匹配
		p("a".matches("[a-z]|[A-Z]"));//a-z或A-Z与a进行匹配
		p("a".matches("[A-Z]&&[RFG]"));
		
		/*
		 * 		认识s w d 		
		 * 
		 *  .  任何字符(与行结束符可能匹配也可能不匹配) 
			d 数字:[0-9] 
			D 非数字: [^0-9] 
			s 空白字符:[ tnx0Bfr] 
			S 非空白字符:[^s] 
			w 单词字符:[a-zA-Z_0-9] 
			W 非单词字符:[^w] 
	   */
		p(" nrt".matches("s{4}"));
		p(" ".matches("S"));
		p("a_8".matches("w{3}"));
		p("abd888&^%".matches("[a-z]{1,3}d+[&^%#]+"));
		p("".matches("\"));//匹配一个反斜杠
		
		//POSIX Style   unix的统一  用的不是太多
		p("a".matches("p{Lower}"));//英文的小写字母
		// 注意p{Upper}或p{Lower}只能判断一个字符,而不是字符串  
		
		//边界匹配(boundary)
		/*
		   ^(开头) 在[]内代表非  在模式串的开头代表第一个字母是什么 
		   $ 末尾
		 */
		p("hello sir".matches("^h.*"));//开头必须是h后面匹配多个0次或多个字符
		p("adasdasd".matches("a.*")); //a后面匹配多个0次或多个字符
		p("adasdasd".matches(".*")); //这是任意的0个或多个字符
		p("adasdasd".matches("a*"));//a后面是0个或多个a  flase
		p("hello sir".matches(".*ir$"));
		p("hello sir".matches("^h[a-z]{1,3}ob.*"));
		p("hellosir".matches("^h[a-z]{1,3}ob.*"));
		
		//空白行
		p(" n".matches("^[s&&[^n]]*n$"));
		//第一个是空格,一个或多个,末尾是n
		
		//练习
		p("aaa 8888c".matches(".*d{4}.")); //true
		p("aaa 8888c".matches(".*bd{4}."));//true
		p("aaa 8888c".matches(".*d{4}."));//true
		p("aaa8888c".matches(".*bd{4}."));//false
		
		//邮箱的匹配
		p("nianxiongdi321@163.com".matches("[a-zA-Z|[0-9]]+@[a-zA-Z|[0-9]]+.[a-zA-Z]{1,6}"));
		p("nianxiongdi321@163.com".matches("[w[.-]]+@[w[.-]]+.[w]+"));
		
		//metches find lookingAt
		
		/*
		 * 		Matcher类的方法:
		 	metches  永远匹配整个字符串
		 	find   找子串
		 	lookingAt 每次从头上找子串
		 	
		 	注意:
		 	  在metches与find一起用的时间,metches在匹配的时候,如果匹配不成功,会把光标停在不匹配的哪里,你在调用find,会接着上一次的光标进行匹配,如果你想从头开始,需要用reset方法重置一下
		 */
		System.out.println("---------------------");
		Pattern pat = Pattern.compile("d{3,5}");
		String s = "123-34354-123-00";
		Matcher m = pat.matcher(s);
		p(m.matches());//模式串与s全部进行匹配
		m.reset();//注意此方法,重置匹配器
		p(m.find());//模式串在s找一个子串进行匹配
		p(m.start()+"-"+m.end());
		p(m.find());
		p(m.start()+"-"+m.end());
		p(m.find());
		p(m.start()+"-"+m.end());
		p(m.find());
		//p(m.start()+"-"+m.end());根据模式串进行匹配的时候,只有找到子串才可以使用start与end方法
		System.out.println("---------------------");
		p(m.lookingAt());
		p(m.lookingAt());
		p(m.lookingAt());

		
		//1.字符串的替换(replacement)
		Pattern p = Pattern.compile("java");//这方法区分大小写
		Matcher ma= p.matcher("java Java JAVA JaVa IloveJAVA you hateJava");
		while(ma.find()){
			p(ma.group());//输出匹配到的子串  分组
		}
		
		//2字符串的替换(replacement)              ?
		Pattern p1 = Pattern.compile("java",Pattern.CASE_INSENSITIVE);//这方法区分大小写  Pattern.CASE_INSENSITIVE   启用不区分大小写的匹配。
		Matcher ma1= p1.matcher("java dsfs  Java JAVA JaVa IloveJAVA you hateJava dsfds");
						//匹配的时候把dsfs  Java看成一个串
		StringBuffer buf = new StringBuffer();
		int i=0;
		while(ma1.find()){
			i++;
			if(i%2==0){
				ma1.appendReplacement(buf,"java");
			}else{
				ma1.appendReplacement(buf,"JAVA");
			}
		}
		ma1.appendTail(buf);
		p(buf);
		
		//1.分组  group
		Pattern p2 = Pattern.compile("d{3,5}[a-z]{2}");
		String  s1 = "132aa-1235bb-132zz-00";
		Matcher m1 = p2.matcher(s1);
		while(m1.find()){//查找子串
			p(m1.group());
		}
		System.out.println("----------------------------------------");
		//2.分组  group
		//d{3,5}[a-z]{2}-->这组正则表达式,用小括号,把他们分开,分成两组,再加上子串本身,共三组,//group默认数组子串的全部  
		// -->(d{3,5})([a-z]{2})-->分组,在多个()时候,只数左小括号,按照1,2,3,4,5...进行编号,在grounp中,直接grounp(n)   n代表你想调用的子串
		Pattern p5 = Pattern.compile("(d{3,5})([a-z]{2})");
		String  s5 = "132aa-1235bb-132zz-00";
		Matcher m5 = p5.matcher(s5);
		while(m5.find()){//查找子串
			p(m5.group(2));
		}
		
		
		
		
		
	}
	
	public static void p(Object o){
		System.out.println(o);
	}
}
</span>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读