黑马程序员-----正则表达式
2015-08-24 18:12
351 查看
——- android培训、java培训、期待与您交流! ———-
一、 正则表达式的概述:
1、 正则表达式用于操作字符串数据的,通过一些特定的符号来表现的。简化了代码,提高了效率,但同时也降低了阅读性。
2、 常见的特殊符号;
1) 特殊字符:
2) 字符类:
3) 预定义字符类:
4) 边界匹配器:
5) Greedy 数量词:
3、示例演示:写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
二、 正则表达式的常见功能:
1、 匹配:String matches方法。用于匹配整个字符串,只要有益处不符合规则,就匹配结束,返回false.
2、 切割:String split方法
1)切割符为多个空格
2)切割符为.
3)为了可以让规则的结构被重用,可以将规则封装成一个组。用()完成。组的出现都有编号,从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。
例如;String reg=”((A)(B))”;
第一组:((A)(B))
第二组:(A)
第三组:(B)
第0组是整个字符串
总结:规则中有几对小括号,就有几组
3、 替换:String replaceAll方法
4、 获取:将字符串中符合规则的子串取出
操作步骤:
示例演示:
三、 网页爬虫(类似于蜘蛛)
示例演示:
——- android培训、java培训、期待与您交流! ———-
一、 正则表达式的概述:
1、 正则表达式用于操作字符串数据的,通过一些特定的符号来表现的。简化了代码,提高了效率,但同时也降低了阅读性。
2、 常见的特殊符号;
1) 特殊字符:
\\:反斜线 \r:回车 \n:换行
2) 字符类:
[abc]:a,b或者c的任意一个。 [^abc]:除了a,b,c以外的字符。 [a-zA-Z]:包括了26个英文字母。 [0-9]:包括了0-9这个10个数字字符。
3) 预定义字符类:
.任意字符 \d 数字[0-9] \D 非数字[^0-9] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w]
4) 边界匹配器:
^ 行的开头 $ 行的结尾 \b 单词边界
5) Greedy 数量词:
x? 0次或1次 x* 0次或多次 x+ 1次或多次 x{n} 恰好n次 x{n,} 至少n次 x{m,n} 至少m次,但不能超过n次
3、示例演示:写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
package com.itheima; /** *需求:写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。 * 例如:18601088888、13912366666 */ public class Test{ public static void main(String[] args) { telCheck(); } public static void telCheck() { String tel="18601088888"; String regex="1[3458]\\d{4}(\\d)\\1{4}"; //定义正则表达式的规则 boolean b=tel.matches(regex); //将字符串tel与regex相匹配 System.out.println(tel+"输入格式为:"+b); } }
二、 正则表达式的常见功能:
1、 匹配:String matches方法。用于匹配整个字符串,只要有益处不符合规则,就匹配结束,返回false.
package com.zhengzedemo; /**需求:演示正则表达式的匹配功能 * @param args */ public class PiPei { public static void main(String[] args) { method(); } public static void method() { String str="shan4"; String regex="[a-z]{4}\\d?"; boolean b=str.matches(regex); System.out.println(b); } }
2、 切割:String split方法
1)切割符为多个空格
package com.zhengzedemo; /**需求:演示正则表达式的切割功能 * @param args */ public class QiGe { public static void main(String[] args) { split_1(); } public static void split_1() { String str="shanwenling qige xiaomei lisisi";//字符串里面的空格不确定个数 String reg=" +";//+代表一个或多个,在这里表示空格是一个或多个 String[] arr=str.split(reg); for(String s:arr) { System.out.println(s); } } }
2)切割符为.
public static void split_2() { String str="shanwenling.qige.xiaomei.lisisi"; String reg="\\.";//因为.是一个任意字符,\.表示一个转义字符,所以要想用.来切割只能是\\. String[] names=str.split(reg); for(String name:names) { System.out.println(name); } }
3)为了可以让规则的结构被重用,可以将规则封装成一个组。用()完成。组的出现都有编号,从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。
例如;String reg=”((A)(B))”;
第一组:((A)(B))
第二组:(A)
第三组:(B)
第0组是整个字符串
总结:规则中有几对小括号,就有几组
3、 替换:String replaceAll方法
package com.zhengzedemo; /**需求:1、将字符串中的叠词替换成# * 2、将字符串中的叠词替换成单个字符 * @param args */ public class TiHuan { public static void main(String[] args) { String str="aggjbkkcwetrrpqq"; String reg="(.)\\1";//这个规则用组的形式表示一个叠词 method_1(str,reg,""); method_2(str,reg,""); } //将字符串中的叠词替换成# public static void method_1(String str,String reg,String newStr) { newStr=str.replaceAll( reg, "#"); System.out.println(newStr); } //将字符串中的叠词替换成单个字符 public static void method_2(String str,String reg,String newStr) { newStr=str.replaceAll( reg, "$1");//$1表示获取前面规则中组的内容 System.out.println(newStr); } }
4、 获取:将字符串中符合规则的子串取出
操作步骤:
1)将正则表达式封装成对象 2)让正则对象和要操作的字符串相关联 3)关联后,获取正则匹配引擎 4)通过引擎对符合规则的子串进行操作,比如取出。
示例演示:
package com.zhengzedemo; import java.util.regex.Matcher; import java.util.regex.Pattern; /**需求:获取字符串中三个字母组成的单词 * @param args */ public class HuoQu { public static void main(String[] args) { method(); } public static void method() { String str="xiang zhe hei ma qian jin"; String reg="\\b[a-z]{3}\\b"; //将正则表达式封装成对象 Pattern pt=Pattern.compile(reg); //让正则对象和要操作的字符串相关联 Matcher m=pt.matcher(str); //关联后,获取正则匹配引擎 while(m.find())//将规则作用在字符串上,并进行符合规则的查找 {System.out.println(m.group());}//获取匹配后的结果 } }
三、 网页爬虫(类似于蜘蛛)
示例演示:
package com.zhengzedemo; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; /**演示网页爬虫的功能: * 1、获取指定文档中的邮箱地址 * 2、获取网页中的邮箱地址 * @param args */ public class PaChong { public static void main(String[] args) throws IOException { method_1(); } //获取指定文档中的邮箱地址 public static void method_1() throws IOException { BufferedReader bufr=new BufferedReader(new FileReader("D:\\a.txt"));//读取指定的文档 String line=null; String mailReg="\\w+@\\w+(\\.\\w+)+";//定义正则规则 Pattern p=Pattern.compile(mailReg);//将正则表达式封装成对象 while((line=bufr.readLine())!=null) //读取文档中的数据 { Matcher m=p.matcher(line);//让正则对象和要操作的字符串相匹配 while(m.find()) //将规则作用在字符串上,并进行符合规则的查找 { System.out.println(m.group());//获取匹配后的结果 } } } //获取网页中的邮箱地址 public static void method_2() throws IOException { URL url=new URL("http://172.18.254.7:8080/myweb/mail.html"); URLConnection conn=url.openConnection(); BufferedReader bufrIn=new BufferedReader(new InputStreamReader(conn.getInputStream())); String line=null; String mailReg="\\w+@\\w+(\\.\\w+)+";//定义正则规则 Pattern p=Pattern.compile(mailReg);//将正则表达式封装成对象 while((line=bufrIn.readLine())!=null) //读取文档中的数据 { Matcher m=p.matcher(line);//让正则对象和要操作的字符串相匹配 while(m.find()) //将规则作用在字符串上,并进行符合规则的查找 { System.out.println(m.group());//获取匹配后的结果 } } } }
——- android培训、java培训、期待与您交流! ———-
相关文章推荐
- 推荐!国外程序员整理的Java资源大全
- 黑马程序员_关于使用IO进行登录注册案例
- 黑马程序员_多线程有关问题
- 机器学习算法面试—口述(2):Adaboost算法及常见问题
- 程序员的年龄天花板
- 黑马程序员_java基础知识点
- 黑马程序员_流程控制语句之循环语句
- 关于数组的几道面试题
- 程序员的三年创业之路
- 程序员未来发展三大方向
- 剑指offer面试题24-二叉搜索树的后序遍历序列
- 20年资深程序员编程经验分享
- 面试中经常让写的关于链表的代码
- 二叉树中的那些常见的面试题
- 黑马程序员_面向对象之封装
- 黑马程序员——线程Thread二(线程安全)
- 黑马程序员_面向对象之构造方法
- 黑马程序员——java基础—反射
- 机器学习算法面试—口述(1):SVM介绍及常见问题
- 剑指offer面试题23-从上往下打印二叉树