JAVA基础——正则表达式
2015-06-13 18:35
501 查看
正则表达式
一、概述
1.概念:符合一定规则的表达式
2.作用:用一些特定的符号来代表一些代码,操作字符串
3.好处:可以简化书写,简化对字符串的操作
4.弊端:字符定义越多,正则越长,阅读性很差
二、常见符号
[]:字符中的一个,[a-zA-Z][0-9] . :一个任意字符 \d:数字 \w:单词字符[0-9a-zA-Z] X?:X出现0次或者一次 X+:X出现一次或者多次 X*:X出现0次或者多次 X{n}:出现n次 X{n,}:至少n次 X{n,m}:出现n,到m次 ^:行的开头 $:行的结尾 \b:单词边界 \B:非单词边界
三、几个操作
1.匹配:matches()
String类中的booleanmatches(String regex)方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
2.切割:split():
切割lisi.zhangshan.wangwu:split(“\.”)
切割C:\abc\bc.txt时:split(“\\”)
组切割”dsfggggfwsfefff”时,split(“(.)\1+”)
注意:按照叠词进行切割:为了让规则的结果被重用,可以用()将规则封装成一个组,每个组都有编号。对于组中所匹配的字符,可以用$n来获取。$在正则中表示行的结尾,所以出现在正则中不能用来表示组,一般用于替换中。
4.替换:replaceAll(regex,str)
“erygrgthgfffffffdgheggg”将叠词替换成单个字符:regex=”(.)\1+” str=”$1” //取第一组
5.获取:将字符串中符合规则的子串取出
步骤: 1.将正则表达式封装成对象 2.让正则对象和要操作的字符串相关联 3.关联后,获取正则匹配引擎 4.通过引擎对符合规则的字符串进行操作
示例:
public static void getString(String s,String regex) { //将规则封装成对象。 Pattern p=Pattern.compile(regex); //让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m=p.matcher(s); //System.out.println(m.matches()); //其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。 //只不过被String的方法封装后,用起来较为简单。但是功能却单一。 while(m.find())//find()方法是将规则作用到字符串上,并进行符合规则的子串查找。 { System.out.println(m.group());//group()方法用于获取匹配后结果。 System.out.println(m.start()+"...."+m.end()); //start()和end()分别表示匹配字符的开始和结尾的索引 } }
四、几个练习
1、对IP地址段进行排序
思路: 还按照字符串自然顺序,只要让他们每一段都是3位即可。 1、按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。 2、将每一段只保留3位。这样,所有的ip地址都是每一段3位。 public static void IPSort1() { String ip = "192.168.255.1 10.0.0.1 127.0.8.2 2.2.2.2"; //将ip的每一段补0,确保每一段至少都有3位数字 String ip1 = ip.replaceAll("(\\d+)", "00$1"); //保留ip的后面三位 ip = ip1.replaceAll("0*(\\d{3})", "$1"); //将字符串进行切割 String[] ipa = ip.split(" +"); //定义TreeSet集合,进行自然排序 TreeSet<String> ts = new TreeSet<String>(); for(String s:ipa) { ts.add(s); } for(String s1:ts) { //去掉ip段多余的0 System.out.println(s1.replaceAll("0*(\\d+)", "$1")); //排序结果:2.2.2.2 10.0.0.1 127.0.8.2 192.168.255.1 }
2.对邮件进行校验
regex=”[a-zA-z0-9_]@[a-zA-Z]+(\\.[a-zA-Z0-9]+)+” //较为精确的匹配 regex=”\\w+@\\w+(\\.\\w+)+” //相对不太精确的匹配
3。写一个网络爬虫
网络爬虫(蜘蛛) 实际上是一个功能,用于搜集网络上的指定信息 需求:可用于收集邮箱,qq号等之类的信息。 应用:如通过关键字搜索blog,实际就是使用的“蜘蛛”,通过查找关键字获取相关的blog //获取网页中mail public static void getWebMail()throws Exception { //封装网页地址 URL url=new URL("http://tieba.baidu.com/p/1390896758"); //连接服务器 URLConnection conn=url.openConnection(); //带缓冲区的网页读取流 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line=null; //定义匹配邮件地址的正则表达式 String regex="\\w+@\\w+(\\.\\w+)+"; Pattern p=Pattern.compile(regex);//封装正则表达式 //读取网页数据 while ((line=br.readLine())!=null) { //正则关联数据 Matcher m=p.matcher(line); //寻找匹配邮箱 while (m.find()) { System.out.println(m.group());//输出匹配邮箱 } } } //获取指定文档中的邮件地址。使用获取功能。Pattern Matcher public static void getFileMail()throws Exception { //将文件封装成对象 File file=new File("E:\\Java Study\\Practice\\day25\\mail.txt"); //创建带缓冲区的读取流 BufferedReader br=new BufferedReader(new FileReader(file)); String line=null; //定义正则表达式 String regex="\\w+@[a-zA-Z]+(\\.[a-zA-z]+)+"; c9aa //创建Pattern对象,封装正则表达式 Pattern p=Pattern.compile(regex); //读取文件中数据 while ((line=br.readLine())!=null) { //关流字符串 Matcher m=p.matcher(line); while (m.find())//寻找匹配的字符串 { System.out.println(m.group());//输出匹配的字符串 } } }
相关文章推荐
- msql 正则表达式
- 正则表达式
- Mootools 1.2教程 正则表达式
- Flex字符串比较 还有Flex字符串操作
- 批处理FINDSTR正则表达式用法实例分析
- ASP Cookies操作的详细介绍与实例代码
- perl数据库添加、删除、更新、查询操作例子
- 总结的5个C#字符串操作方法分享
- vbs正则表达式代码
- C#操作XML文件实例汇总
- C#中父窗口和子窗口之间控件互操作实例
- C#操作PowerPoint的方法
- SQL语句 操作全集 学习mssql的朋友一定要看
- linux mysql 安装与操作
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- php中看实例学正则表达式
- PHP正则表达式之定界符和原子介绍
- PHP下常用正则表达式整理
- 使用PHPExcel操作Excel用法实例分析
- C# WORD操作实现代码