
正则表达式练习
发布日期: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()); } }}
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月22日 19时53分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
来讲讲你对ThreadLocal的理解
2021-05-09
No.017:Letter Combinations of a Phone Number
2021-05-09
No.021:Merge Two Sorted Lists
2021-05-09
RESTful API 介绍,设计
2021-05-09
asp.net中用FileStream类实现下载文件功能,自定义下载路径,像IE下载一样
2021-05-09
C#获取Excel中所有的Sheet名称
2021-05-09
unity3d由于Camera.main.transform报空引用错误的解决方案
2021-05-09
SQL Syscolumns
2021-05-09
jQuery实现日期字符串格式化
2021-05-09
vue学习笔记(十)路由
2021-05-09
[最全整理]关于决策树的一切
2021-05-09
100天搞定机器学习|Day9-12 支持向量机
2021-05-09
100天搞定机器学习|Day19-20 加州理工学院公开课:机器学习与数据挖掘
2021-05-09
100天搞定机器学习|Day22 机器为什么能学习?
2021-05-09
100天搞定机器学习|day37 无公式理解反向传播算法之精髓
2021-05-09
《统计学习方法》极简笔记P2:感知机数学推导
2021-05-09
数据工程师必备的8项技能,不要只知道Python!
2021-05-09
R in action读书笔记(3)-第六章:基本图形
2021-05-09
R in action读书笔记(19)第十四章 主成分和因子分析
2021-05-09
CISC和RISC是什么?它们的特点和区别?
2021-05-09