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

【JAVA基础】正则表达式

发布时间:2020-12-13 22:38:29 所属栏目:百科 来源:网络整理
导读:正则表达式:RegularExpressions(字符串处理利器) 都在java.util.regex.*;包中 样例: package cn.edu.RegularExpressions;import java.util.regex.Matcher;import java.util.regex.Pattern;class Test {public static void main(String[] args) {//简单理解
正则表达式:RegularExpressions(字符串处理利器)

都在java.util.regex.*;包中

样例:
package cn.edu.RegularExpressions;

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

class Test {
	public static void main(String[] args) {
		//简单理解正则表达式
		System.out.println("abc".matches("..."));
		//其中“d”代表一个数字(0-9)
		System.out.println("a324234a".replaceAll("d","-"));
		Pattern p=Pattern.compile("[a-z]{3}");
		Matcher m=p.matcher("fgh");
		System.out.println(m.matches());
		System.out.println("fgha".matches("[a-z]{3}"));
		/*结果
		 * true
           a------a
		   true
		   false
		 * */
		
		//初步认识. * +
		p("1:"+"a".matches("."));//
		p("2:"+"aa".matches("aa"));//true,正则表达式可以写正常的字符
		p("3:"+"aaaa".matches("a*"));//“*”代表的是0个或者多个
		p("4:"+"aaaa".matches("a+"));//“+”代表的是1个或者多个
		p("5:"+"".matches("a*"));
		p("6:"+"aaaa".matches("a?"));//“?”代表的是0个或1个
		p("7:"+"".matches("a?"));
		p("8:"+"a".matches("a?"));
		p("9:"+"2342342432423234".matches("d{3,100}"));//“{”与“}”代表出现的次数(几次,至少几次,最多几次最少几次)
		//最简单的检测IP地址的方式:
		p("10:"+"192.168.0.aaa".matches("d{1,3}.d{1,3}"));
		p("11:"+"192".matches("[0-2][0-9][0-9]"));//“[]”代表一个范围
		/*结果:
		1:true
		2:true
		3:true
		4:true
		5:true
		6:false
		7:true
		8:true
		9:true
		10:false
		11:true*/
		
		p("a".matches("[abc]"));
		p("a".matches("[^abc]"));
		p("A".matches("[a-zA-Z]"));
		p("A".matches("[a-z] | [A-Z]"));
		p("A".matches("[a-z[A-Z]]"));
		p("R".matches("[A-Z&&[RFG]]"));
		/*true
		false
		true
		false
		true
		true*/


		/*
		 * "."代表任何字符
		 * "/d"[0-9]的数字
		 * "/D"非[0-9]的数字[^d]
		 *"/s"空白字符(包括空格,Tab键t,换行n,backspace后退键/x0B,制表符/f,回车/r)
		 * "/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("abc888&^%".matches("[a-z]{1,3}d+[&^#%]+"));
		p("".matches("\"));//在matches中,一个""要用""来表示
	/*	true
		false
		true
		true
		true*/
		
		//POSIX Style
		p("a".matches("p{Lower}"));
		/*true*/
		
		//边界匹配
		//"^"位于中括号里面的时候是取反的意思,位于外面代表的是输入的开头
		p("hello sir".matches("^h.*"));//以"h"开头
		p("hello sir".matches(".*ir$"));//以"ir"结尾
		p("hello sir".matches("^h[a-z]{1,3}ob.*"));//b一个单词的边界(空格,空白字符,换行,特殊字符)
		p("hellosir".matches("^h[a-z]{1,3}ob.*"));
		/*true
			true 
			false*/
		
		//把空白行找出来
		p(" n".matches("^[s&&[^n]]*n"));//以空白字符开头,并且不是换行符,出现0次或多次
		/*true*/
		
		//匹配email地址的正则表达式(有得email地址是含有横线和点号的)
		p("basdbjasbkja@dasbdn.com".matches("[w[.-]]+@[w[.-]]+.[w]+"));
		
		//matches find lookingAt
		Pattern p1=Pattern.compile("d{3,5}");//编译正则表达式
		String s="123-34345-234-00";
		Matcher m1=p1.matcher(s);
		p(m1.matches());
		//false
		//find()一段一段的匹配
		//分析到“-”时,不符合p1的标准,认为结束
		m1.reset();//matches与find一起使用时需要reset
		p(m1.find());
		p(m1.start()+"-"+m1.end());//输出“-”的起始位置和结束位置(结束位置就是本身位置)
		p(m1.find());
		p(m1.start()+"-"+m1.end());
		p(m1.find());
		p(m1.start()+"-"+m1.end());
		p(m1.find());
//		true
//		true
//		true
//		false
		
		p(m1.lookingAt());
		//true
		
		//区别matches找整个串 
		//find找字串
		//lookingAt每次都从头上开始找
		
		//字符串的替换
		Pattern p2=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//CASE_INSENSITIVE忽略大小写
		Matcher m2=p2.matcher("java Java JAVa JaVa IloveJAVA you hateJava lalalala");
		while(m2.find()){
			p(m2.group());//按组找
		}
		p(m2.replaceAll("JAVA"));
		//全部改为JAVA JAVA JAVA JAVA IloveJAVA you hateJAVA
		
		m2.reset();
		StringBuffer buf=new StringBuffer();
		int i=0;
		while(m2.find()){
			i++;
			if(i%2==0){//奇数大写偶数小写
				m2.appendReplacement(buf,"java");
			}else{
				m2.appendReplacement(buf,"JAVA");
			}
		}
		m2.appendTail(buf);//将尾巴加进去
		p(buf);
		//JAVA java JAVA java IloveJAVA you hatejava lalalala
		
		//分组:使用小括号组成的,分了机组就有几对小括号
		//每个组有自己的组号
		Pattern p3=Pattern.compile("(d{3,5})([a-z]{2})");
		String s1="123aa-12323bb-456cc-00";
		Matcher m3=p3.matcher(s1);
		while(m3.find()){
			p(m3.group());//按组找
			p(m3.group(1));
			p(m3.group(2));
		}
		/*123aa
		123
		aa
		12323bb
		12323
		bb
		456cc
		456
		cc*/
		


	}
	
	public static void p(Object o){
		System.out.println(o);
	}


}

转载请注明出处 : http://blog.csdn.net/acmman

(编辑:李大同)

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

    推荐文章
      热点阅读