正则表达式练习
发布日期:2021-05-09 04:21:20 浏览次数:16 分类:博客文章

本文共 5414 字,大约阅读时间需要 18 分钟。

正则表达式的初步小练习 和 一个抓取网页邮箱的例子

1.小练习

import java.util.regex.Matcher;import java.util.regex.Pattern;public class test {	public static void main(String[] args) {		/*// 简单认识正则表达式		//一个点代表一个字符,判断是否符合这种格式		p("abc".matches("..."));		p("a8729a".replaceAll("\\d", "-"));		//定义一个正则表达式模式,并且编译,在以后的开发中可以加快速度		Pattern p = Pattern.compile("[a-z]{3}");		//给要检查的字符序列与正则表达式比较的结果定义为matcher		Matcher m = p.matcher("fgh");		p(m.matches());		p("fgh".matches("[a-z]{3}"));*/				/*//初步认识 . * + ?		p("a".matches("."));//.代表任意一个字符		p("aa".matches("aa"));//只要求首字母和第二个字母匹配,后面的不管		p("aaaa".matches("a*"));//*代表0个或者多个		p("aaaa".matches("a+"));//+代表一个或者多个		p("".matches("a?"));//?代表一个或者0个		p("".matches("a*"));		p("aaaa".matches("a?"));		p("a".matches("a?"));		p("214523145234532".matches("\\d{3,100}"));//至少出现3次,最多不超过100次		p("127.0.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\."));		p("192".matches("[0-2][0-9][0-9]"));*/				/*//范围		p("a".matches("[abc]"));//取中括号中的诸多值的一个		p("a".matches("[^abc]"));//取中括号里面值之外的其他值 ^代表取反		p("A".matches("[a-zA-Z]"));//取a-z或者A-Z之间的某一个		p("A".matches("[a-z]|[A-Z]"));//取a-z或者A-Z之间的某一个  并集		p("A".matches("[a-z[A-Z]]"));//取a-z或者A-Z之间的某一个		p("R".matches("[A-Z&&[RFG]]"));//取A-Z之间的某一个值并且还得是RFG三个中的一个  交集*/				/*//认识\d \s \w		p("\n\r\t".matches("\\s{4}"));//\s代表空白字符		p(" ".matches("\\S"));		p("a_8".matches("\\w{3}"));//\w代表构成单词的字符		p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));		p("\\".matches("\\\\"));//java里面正则表达式用四个反斜线来表示一个正常的反斜线*/						//POSIX Style  POSIX是UNIX操作系统的一种标准		//p("a".matches("\\p{Lower}"));				/*//boundary 开头和结尾的匹配		//^代表一行的开头		p("hello sir".matches("^h.*"));		//$一行的结尾		p("hello sir".matches(".*ir$"));		//\b单词边界		p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));		p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));*/				/*//white lines 空白行		//统计空白行 " \n"代表空白行  以空白字符打头但不是回车同时以换行作为结尾		p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));*/				/*//test		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("dsafdsfafdsa@dsadf.com".matches("\\w[.-]+@[\\w[.-]]+\\.[\\w]+"*/						/*//matches find lookingAt				Pattern p = Pattern.compile("\\d{3,5}");		String s = "123-2345-234-00";		Matcher m = p.matcher(s);		//matches每次找到的都是整个串		p(m.matches());		m.reset();*/				/*//从剩余的字符串中进行查找 find用于查找字串		//若没有reset下面的find会受matches的影响,从2345开始寻找		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());						//每次从头开始找		p(m.lookingAt());		p(m.lookingAt());		p(m.lookingAt());		p(m.lookingAt());*/				/*//replacement		Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);		Matcher m = p.matcher("java Java JAVa IloveJaVa you hate jAva");		//p(m.replaceAll("JAVA"));		while(m.find()) {			//输出子串			p(m.group());		}		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		//Pattern p = Pattern.compile("\\d{3,5}[a-z]{2}");		Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");		String s = "123aa-23234bb-234cc-00";		Matcher m = p.matcher(s);		while(m.find()) {			//在正则表达式中进行数据的分组,便于信息的提出			p(m.group(1));			p("   ");			p(m.group(2));		}*/				/*//qulifiers 三种不同的形态 贪婪、不情愿、独占		//贪婪的,先整个吞进来再往外面吐		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 = "aaaa5bbbb";		Matcher m = p.matcher(s);		if(m.find()) {			p(m.start() + "---" + m.end());		} else {			p("nor match!");		}*/						/*//back refenrences		//前面的两个整数作为一个组,\1代表的意思是后来找到的必须和第一组是完全一致的		//Pattern p = Pattern.compile("(\\d\\d)\\1");//false		//String s = "1234";		//第一个数为一个组,第二个数为一个组,\2代表的含义是后面找到的数必须和第二组保持一致		Pattern p = Pattern.compile("(\\d(\\d))\\2");		String s = "122";		Matcher m = p.matcher(s);		p(m.matches());*/						/*//flag的简写		Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);//标志忽略大小写关系		p("Java".matches("(?i)(java)"));//(?i)表示打开标志位或者关闭标志位*/								/*//non-capturing groups		//Pattern p = Pattern.compile(".{3}");				//()里面以?开始不是代表一个组而是代表一个不捕获组,3个字符后面跟一个a,实际截取的只是前面三个字符		//Pattern p = Pattern.compile(".{3}(?=a)");				//放在前面和放在后面不一样,表示以a打头三个字符,输出为a66。非捕获的意思,符合就捕获,不符合就不捕获		//Pattern p = Pattern.compile("(?=a).{3}");				//不以a打头的三个字符,输出结果为444 66b		//Pattern p = Pattern.compile("(?!a).{3}");				//不以以a为结尾的前面三个字符 输出结果为44a 66b		//Pattern p = Pattern.compile(".{3}(?!a)");				//从后往前数第一个不是字符a的,包含最后一个本身 输出结果为444 a66		//Pattern p = Pattern.compile(".{3}(?

2.网页抓取邮箱

import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.regex.Matcher;import java.util.regex.Pattern;public class testEmail {	//抓取网页邮箱代码	public static void main(String[] args) throws IOException {		BufferedReader br = new BufferedReader(new FileReader("E:\\eclipse_code\\RegExp\\testEmail.html"));		String line = "";		while((line = br.readLine()) != null) {			parse(line);		}	}	private static void parse(String line) {		Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");		Matcher m = p.matcher(line);		while(m.find()) {			System.out.println(m.group());		}	}}

上一篇:如何利用panel在一个窗口中实现诸多页面的显示
下一篇:JavaSE初步学习笔记

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月22日 19时53分06秒