JAVA正则表达式基础入门

原创 2013年12月04日 09:51:36

 

/*
 * 这个类主要是为了解决正则表达式基础入门
 */
public class Test {

	public static void main(String[] args) {
		
		//.代表任意的一个字符(与行结束符可能匹配也可能不匹配)
		p("abc".matches("..."));
		//将数字替换为“-”,\d表示一个数字
		p("a8729a".replaceAll("\\d", "-"));
		//取值范围为a到z之间的所有字符,长度只有3
		Pattern p = Pattern.compile("[a-z]{3}");
		Matcher m = p.matcher("fgh");
		p(m.matches());
		//上面三句代码和下面一句代码意思是一致的
		p("fgha".matches("[a-z]{3}"));
		
		/*
		//初步认识. * + ?
		//.代表任意的一个字符
		p("a".matches("."));
		p("aa".matches("aa"));
		//*代表0个或者是多个,前面必须有字符,不能单独使用,“a*”表示0个或者多个a
		p("aaaa".matches("a*"));
		//+代表1个或者是多个,前面必须有字符,不能单独使用,“a+”表示1个或者多个a
		p("aaaa".matches("a+"));
		p("".matches("a*"));//true
		//?表示0个或者是1个,前面必须有字符,不能单独使用,“a?”表示0个或是1个a
		p("aaaa".matches("a?"));//false
		p("".matches("a?"));
		p("a".matches("a?"));
		//\d{3,100}表示至少有3个数字,至多有100个数字,{}表示匹配的字符的数量
		p("214523145234532".matches("\\d{3,100}"));
		p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
		//[0-2][0-9][0-9]匹配第一个数字范围在0到2之间,第二个在0到9之间,第三个在0到9之间
		p("192".matches("[0-2][0-9][0-9]"));
		*/
		
		/*
		//[]表示范围
		p("a".matches("[abc]"));
		//^表示除开[]里面以外的字符
		//[^abc]表示abc以外的字符
		p("a".matches("[^abc]"));
		//下面三个都是a-z和A-Z,取两者的并集,只是三种不同的写法
		p("A".matches("[a-zA-Z]"));
		p("A".matches("[a-z]|[A-Z]"));
		p("A".matches("[a-z[A-Z]]"));
		//范围是A到Z并且是RFG,也就是说的取交集
		p("R".matches("[A-Z&&[RFG]]"));
		*/ 

		//认识\s \w \d \
		/*
		 * \s表示空白字符
		 * \w表示单词字符
		 * \d表示数字
		 * 上面的字母大写就表示小写的取反
		*/
		/*
		p(" \n\r\t".matches("\\s{4}"));
		p(" ".matches("\\S"));
		p("a_8".matches("\\w{3}"));
		p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
		p("\\".matches("\\\\"));
		*/
		
		//边界匹配
		/*
		//^表示行的开头,"^he.*"表示是以he开头,而不仅仅是针对h开头
		p("hello sir".matches("^he.*"));
		p("hillo sir".matches("^he.*"));
		//$行的结尾,".*ir$"表示是以ir结尾,而不仅仅是针对r结尾
		p("hello sdr".matches(".*ir$"));
		p("hello sir".matches(".*ir$"));
		//\b表示的是单词边界,\B表示的是非单词边界
		p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
		p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
		p("hellosir".matches("^h[a-z]{1,3}o\\B.*"));
		//whilte lines
		p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
		p("aaa 8888c".matches(".*\\d{4}."));
		p("aaa 8888c".matches(".*\\b\\d{4}."));
		p("aaa8888c".matches(".*\\d{4}."));
		p("aaa8888c".matches(".*\\b\\d{4}."));
		*/
		
		//email
		//p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
		
		/*
		//matches()方法和find()方法相互影像 
		Pattern p = Pattern.compile("\\d{3,5}");
		String s = "123-34345-234-00";
		Matcher m = p.matcher(s);
		//matches()方法会匹配所有的字符串,和\d{3,5}表达式去匹配,明显是不符合的
		p(m.matches());//false
		//如果不使用reset()方法,则匹配的字符串从34345-234-00开始,因为之前的123-被前面的matches()方法匹配了
		m.reset();
		//find()方法找子字符串,在这里必须先使用,不然后面的start()和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());
		p(m.find());
		//如果没有使用上面的reset()方法,则使用下面的语句会抛异常
		//p(m.start() + "-" + m.end());
		
		//lookingAt()尝试将从区域开头开始的输入序列与该模式匹配。因此下面的四个输出总是true
		p(m.lookingAt());
		p(m.lookingAt());
		p(m.lookingAt());
		p(m.lookingAt());
		*/
 
		//replacement
		//Pattern.CASE_INSENSITIVE表示匹配不区分大小写,将偶数java全部设为大写
		/*
		Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
		StringBuffer buf = new StringBuffer();
		int i=0;
		while(m.find()) {
			i++;
			if(i%2 == 0) {
				m.appendReplacement(buf, "java");
			} else {
				m.appendReplacement(buf, "JAVA");
			}
		}
		m.appendTail(buf);
		p(buf);
		*/
		
		//group
		//(\\d{3,5})([a-z]{2})表达式分了三组,第一组是整体匹配,为第0组,(\\d{3,5})为第1组,([a-z]{2})为第二组
		/*
		Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
		String s = "123aa-34345bb-234cc-00";
		Matcher m = p.matcher(s);
		//这里只有使用了find()方法,才能使用group()方法,不然会抛异常
		while(m.find()) {
			p(m.group());
		}
		System.out.println("找出只满足上面正则表达式其中一部分的情况——分组");
		System.out.println("匹配(\\d{3,5})");
		m.reset();
		while(m.find()) {
			//显示的是第一个括号的分组
			p(m.group(1));
		}
		System.out.println("匹配([a-z]{2})");
		m.reset();
		while(m.find()) {
			//显示的是第一个括号的分组
			p(m.group(2));
		}
		*/
		
		//qulifiers
		/*
		 * (.{3,10}?)表示的是Reluctant(不情愿的)匹配模式,会从最少的去匹配,即3个开始,如果不匹配会逐步增加匹配数量
		 * (.{3,10}+)表示的是Possessive(独占的)匹配模式,会直接匹配最大的数量,即10个,但是不会往少了去匹配,这种方式效率比较高
		 * 如果s = "aaaa5bbbb65"这样就能和+独占匹配方式匹配了
		 * (.{3,10})表示的是greedy(贪婪的)匹配模式,会直接匹配最大的数量,如果不匹配,会自动的往数量小的地方去匹配
		 */
		/*
		Pattern p = Pattern.compile("(.{3,10}+)[0-9]");
//		Pattern p = Pattern.compile("(.{3,10}?)[0-9]");
//		Pattern p = Pattern.compile("(.{3,10})[0-9]");
		String s = "aaaa5bbbb6";
		Matcher m = p.matcher(s);
		if(m.find()){
			p(m.group());
			p(m.start() + "-" + m.end());
		}
		else 
			p("not match!");
		*/
		
		//non-capturing groups
		/*
		//表示最后一个字符为a,且a不被捕获
		Pattern p = Pattern.compile(".{3}(?=a)");
		String s = "444a66b";
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());
		}
		*/
	}	
	
	public static void p(Object o) {
		System.out.println(o);
	}

}
 

 

【Java基础】Java正则表达式入门

一:什么是正则表达式     1.定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描...
  • moshenglv
  • moshenglv
  • 2016年07月29日 10:28
  • 215

Java正则表达式入门基础篇

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为...
  • ryelqy
  • ryelqy
  • 2017年07月24日 19:57
  • 106

java正则表达式入门基础

一、正则表达式术语  1)元字符 : 非一般字符,具有某种意义的字符。如 : \bX : \b边界符, 以 X开始的单词    2) 常用 :   \d : 匹配一个数字 : \d ,  匹配至...
  • csdn_xpw
  • csdn_xpw
  • 2017年03月22日 22:41
  • 36

《java基础入门》课后习题答案_传智播客版

链接:https://pan.baidu.com/s/1dE1MgRv 密码:6m9h
  • ESESZB
  • ESESZB
  • 2017年11月29日 13:10
  • 478

JAVA入门基础详解之一

一,系统及Java开发环境 1、介绍Linux操作系统:非常主流的服务器操作系统、开源的操作系统、免费、类Unix操作系统     Java主要用于服务器端的开发,因此Java应用的部署环境有很多为L...
  • sinat_36258409
  • sinat_36258409
  • 2016年10月16日 13:14
  • 417

Java总结 正则表达式30分钟入门教程 我这里只需要五分钟

Java总结 正则表达式30分钟入门教程 我这里只需要五分钟
  • HZ_LIZX
  • HZ_LIZX
  • 2017年02月15日 16:10
  • 943

初学JSP(JSP基础)

本文章是作者刚学JSP后的一个总结,刚接触JSP的朋友可以来看看,大神可以帮忙提出一下错误!...
  • hy_butter
  • hy_butter
  • 2017年03月05日 21:02
  • 987

Python零基础入门一

上一个寒假学习完了《Android-第一行代码》这本书,这个寒假打算好学习一下python这门语言,一方面是由于对python的爬虫比较感兴趣,另一方面也是算是搜索查找的一种工具。这次学习由于没有找到...
  • BeMoreQuiet
  • BeMoreQuiet
  • 2017年01月09日 21:21
  • 1181

Winform基础入门(一)

l       概念和基础 l       常用的控件及其作用 l       向文本框添加时间和控件ComboBox l       MessageBox类和窗体的一些属性事件 l       Ta...
  • u011593927
  • u011593927
  • 2013年10月13日 14:01
  • 4183

java界面编程(1) ------ Swing基础

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020           最近想学下java的界面编程,在此记录下。     大多...
  • jesson20121020
  • jesson20121020
  • 2014年11月15日 00:00
  • 1412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA正则表达式基础入门
举报原因:
原因补充:

(最多只允许输入30个字)