< 笔记 > Java SE
来源:互联网 发布:代挂乐最新源码 编辑:程序博客网 时间:2024/05/29 08:02
10 Java SE 正则表达式
By Kevin Song
概述
作用:操作字符串数据
public class RegexDemo { public static void main(String[] args) { String qq = "303043149"; //第一位1到9 //第二位0到9 //第二位0到9出现4到14次 String regex = "[1-9][0-9]{4,14}";//正则表达式 boolean b = qq.matches(regex); System.out.println(qq+b); } public static void checkQQ(String qq) { int len = qq.length(); if(len>=5 %% len<=15) { if(!qq.startsWith("0")) { try { long l Long.parseLong(qq); } catch(NumberFormatException e) { System.out.println("非法字符"); } } else { System.out.println(qq+":不能0开头"); } } else { System.out.println(qq+"长度错误"); } }}
常见的规则
组的概念
((A)(B(C)))
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
组零始终代表整个表达式
常见功能
正则表达式对字符串的常见操作
- 匹配
- 使用String类中的matches方法
- 切割
- 使用String类中的split方法
- 替换
- 使用String类中的replaceAll方法
- 获取
- 将正则表达式封装成对象
- Pattern p = Pattern.compile(“a*b”);
- 通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher
- Matcher m = p.matcher(“aaaaab”);
- 通过Matcher匹配其对象的方法对字符串进行操作
- boolean b = m.matches();
- 将正则表达式封装成对象
public class RegexDemo2 { public static void main(String[] args) { functionDemo_4(); } /*获取 */ public static void functionDemo_4() { String str = "da jia hao,ming tian bu fang jia!"; /* 获取三个字母的单词[a-z]{3} */ String regex = "\\b[a-z]{3}\\b"; //把正则封装成对象 Pattern p = Pattern.compile(regex); //通过正则对象获取匹配器对象 Matcher m = p.matcher(str); //使用Matcher对象的方法对字符串进行操作 //要获取三个字母组成的单词,用find()方法 System.out.println(str); while(m.find()) { System.out.println(m.group());//获取匹配的子序列 System.out.println(m.start()+":"+m.end());//获取字母开始和结束位置,包头不包尾 } } //替换 public static void functionDemo_3() { String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu"; /* 把.用()封装成组(.) 组的编号为\\1 编号为1的组出现过一次或者多次所以(.)\\1+ 获取编号1组里的字母并且替换$1 */ str = str.replaceAll("(.)\\1+", "$1"); System.out.println(str); String tel = "15800001111";//158****1111; /* 前三个数封装成编号为1的组(\\d{3}) 末四个数封装成编号为2的组(\\d{4}) */ tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); System.out.println(tel); } //切割 public static void functionDemo_2(){ String str = "zhangsan xiaoqiang zhaoliu"; String[] names = str.split(" +");//一次或多次空格 String str = "zhangsan.xiaoqiang.zhaoliu"; String[] names = str.split("\\.");//用.来切,\\转义 String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu"; /* 把.用()封装成组(.) 组的编号为\\1 编号为1的组出现过一次或者多次所以(.)\\1+ */ String[] names = str.split("(.)\\1+");/ for(String name : names){ System.out.println(name); } } //匹配 public static void functionDemo_1(){ //匹配手机号码是否正确 String tel = "15800001111"; /* 第一位固定1 第二位是3,5,8中的一个[358] 第三位开始[0-9]用预定义字符类表示\\d重复9次 */ String regex = "1[358]\\d{9}"; boolean b = tel.matches(regex); System.out.println(tel+":"+b); }}
正则表达式练习
练习一
- 过滤信息
- We….neeeeeed..baa…aaack……uuu..up
- ip地址排序
- 192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55
- 邮件地址校验
public class RegexTest { public static void main(String[] args) { test_1(); } public static void test_1 { String str = "We....neeeeeed..baa...aaack......uuu..up"; //去掉... str = str.replaceAll("\\.+"," "); //替换叠词 str = str.replaceAall("(.)\\1+","$1"); System.out.println(str); } public static void test_2 { String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55"; //为了让ip可以按照字符串顺序比较,只要让ip的每一段的位数相同 //补零,每一段加2个0 ip_str = ip_str.replaceAll("(\\d+)","00$1"); //00192.168.10.34 00127.0.0.1 003.3.3.3 00105.70.11.55 System.out.println(ip_str); //每一段保留数字三位 ip_str = ip_str.replaceAll("0*(\\d{3})","$1"); //192.168.10.34 127.0.0.1 003.3.3.3 105.70.11.55 System.out.println(ip_str); //把ip地址切出 str = str.split(" +"); TreeSet<String> ts = new TreeSet<String>(); for(String ip : ips) { ts.add(ip); } for(String ip : ts) { //0没有或者多次后跟着连续数字 //用连续的数字替换带0的那部分 System.out.println(ip.replaceAll("0*(\\d+)", "$1")); } public static void test_3 { String mail = "abc@sina.com"; /* 第一部分大小写字母数字下划线都可以一个或者多个[a-zA-Z0-9_]+ 第二部分固定@ 第三部分大小写字母数字都可以一个或者多个[a-zA-Z0-9]+ 第四部分(\\.字母出现1到3次)出现一次或者多次(\\.[a-zA-Z]{1,3})+ */ String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+\\.[a-zA-Z]{1,3})+"; regex = "\\w+@\\w+(\\.\\w+)+"; boolean b = mail.matches(regex); System.out.println(mail+":"+b); } }}
网页爬虫
定义:在互联网中获取符合指定规则数据的程序
public class RegexTest2 { public static void main(String[] args) throws IOException { List<String> list = getMailsByWeb(); for(String mail : list){ System.out.println(mail); } } public static List<String> getMailsByWeb() throws IOException { //1, 读取源文件 //BufferedReader bufr = new BufferedReader(new FileReader("c:\\mail.html")); URL url = new URL("http://192.168.1.100:8080/myweb/mail.html"); BufferedReader bufIn = new BufferedReader(new InputStreamReader(url.openStream())); //2,对读取的数据进行规则的匹配,从中获取符合规则的数据 String mail_regex = "\\w+@\\w+(\\.\\w+)+"; List<String> list = new ArrayList<String>(); Pattern p = Pattern.compile(mail_regex); String line = null; while((line=bufIn.readLine())!=null){ Matcher m = p.matcher(line); while(m.find()){ //3,符合规则的数据存储到集合中 list.add(m.group()); } } return list; } public static List<String> getMails() throws IOException{ //1, 读取源文件 BufferedReader bufr = new BufferedReader(new FileReader("c:\\mail.html")); //2,对读取的数据进行规则的匹配,从中获取符合规则的数据 String mail_regex = "\\w+@\\w+(\\.\\w+)+"; List<String> list = new ArrayList<String>(); Pattern p = Pattern.compile(mail_regex); String line = null; while((line=bufr.readLine())!=null){ Matcher m = p.matcher(line); while(m.find()){ //3,符合规则的数据存储到集合中 list.add(m.group()); } } return list; }}
阅读全文
0 0
- JAVA SE学习笔记
- Java se笔记_2
- JAVA SE 笔记
- Java SE 详细笔记
- JAVA SE 学习笔记
- java se 集合 笔记
- java se 学习笔记
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- < 笔记 > Java SE
- Java SE 自学笔记1
- AWK快速入门
- python学习里的常见IT英语
- (二)c#整合zeroIce
- 最大栈
- 计算2的N次方
- < 笔记 > Java SE
- 排序算法(稳定)
- 【Linux命令】磁盘管理
- SSH整合开发的小Demo--网上银行系统之管理员模块开发
- Hbase启动后,在主节点只有Hmaster,而在slave节点上没有Hregionserver
- 快速排序优化-4个方面
- 研究生课程 算法分析笔记
- 【第二周周练 E 】
- 各种皮试液的配制方法