黑马程序员-----正则表达式
来源:互联网 发布:开80端口 编辑:程序博客网 时间:2024/06/05 19:06
——- 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培训、期待与您交流! ———-
0 0
- 黑马程序员-正则表达式
- 黑马程序员 正则表达式
- 黑马程序员:正则表达式
- 黑马程序员---正则表达式
- 黑马程序员:正则表达式
- 黑马程序员--正则表达式
- 黑马程序员--正则表达式
- 黑马程序员--正则表达式
- 黑马程序员--正则表达式
- 黑马程序员 正则表达式
- 黑马程序员-正则表达式
- 黑马程序员:正则表达式
- 黑马程序员-正则表达式
- 黑马程序员 正则表达式
- 黑马程序员---正则表达式
- 黑马程序员---正则表达式
- 黑马程序员-正则表达式
- 黑马程序员--正则表达式
- 同一字符串,MD5加密后出现不同的结果
- Android中Timer使用方法
- Android中View绘制优化之一---- 优化布局层次
- 解决Ubuntu系统中文乱码显示问题
- 从dll得到lib文件
- 黑马程序员-----正则表达式
- constexpr和常量表达式
- Cannot set TextView width using setWidth or setLayoutParams
- BestCoder#52 Victor and Toys
- eclipse集成jboss及jboss环境配置
- Ubuntu安装vncserver实现图形化访问
- oracle函数trunc的使用
- MS sql 小技巧
- linux vnc服务配置详细教程