ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:1.18MB ,
资源ID:11353543      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11353543.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java正则表达式基础及应用.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Java正则表达式基础及应用.docx

1、Java正则表达式基础及应用正则表达式基础及Java正则表达式应用陈敏刚 2016.7.14【引言】由于研究需要对日志信息、视频信息作大数据的分析,特整理以下正则表达式的各种用法,比如如何提取Apache日志信息中的IP地址和访问时间,如何设计简单的网络爬虫程序等,主要通过Java语言描述,其它语言如Python思路也基本相通。1. 正则表达式基本概念正则表达式,也叫 Regular Expressions,它实际上是用来搜索、匹配字符串的模式。正则表达式一般要表达三个要素。(1)要匹配的字符,如0-9;(2)字符的数量或者有几个这样的字符,如2,4,即2-4个字符,需要用大括号括起来。(3)

2、字符的位置在哪儿?如b表示字符的边界,border。要熟悉以上正则表达式的基本元素,可以对应于正则表达式的要素,分为字符类、数量类和位置类。(1). 代表1个字符的通配符比如,t.n可匹配“tan,ten,ton,tpn”等(2)代表字符集,只有方括号里指定的字符才能参与匹配,方括号内只能匹配单个字符,但可用连字符-来表示范围,如0-9表示0-9中的一个数字;比如,taeioun,可匹配“tan,ten,ton”,但不匹配tpn、toon等。表示排斥性字符集。比如,xa-z+,可匹配除x开头的所有单词。(3)()用来分组,在()内可以使用“|”操作表示“或”,方括号不能用“|”比如,t(a|e

3、|i|o|u|oo)可匹配“tan,ten,ton”,还可匹配toon。(4)表示起始位置、b表示单词边界星号*表示 0个或多个加号+表示 1 或多个问号?表示0个或1个n就是写个数字表示重复多少次0-9+ 来查找年份,字符为数字,数字出现1个或多个。由于正则表达式比较难用,所以引入一些简写方式,比如d表示数字(digit)0-9,s表示空白符(space)、w表示单词字符(word)a-zA-Z_0-9。正则表达式写起来还是比较麻烦,因此经常需要利用工具,比如QRe,b(href)=(+)上面正则表达式的解释:(1) 两个圆括号()代表两个group(2) b表示单词边界,(href)表示g

4、roup1(3) (+)表示group2,字符是开始,结束,中间1个或多个非字符,整个匹配字符串的称为group02. 正则表达式的基本应用Java中正则表达式,需要用到java.util.regex包,这个包主要有两个类,分别是Pattern类(模式类)和Matcher类(匹配类)2.1字符串的分割/将正则表达式”,s+”编译成模式类对象p,s表示空格,并用了表示转义符Pattern p = Ppile(“, s+”); /调用p的split方法分割字符串String result = p.split( one,two, three four , five );2.2字符串的匹配验证/开始的

5、表示字符串开始,结尾的$表示字符串结尾/前表示1到多个非字符/后“w+”表示1到多个word,w表示w的转义/“(.w+)*”表示多个”.word”的模式String pattern = +w+(.w+)*$;String email = dstang2000;boolean ok = Pattern.matches( pattern, email );2.3字符串的替换import java.util.regex.*;public class RegexReplacement public static void main(String args) throws Exception Patt

6、ern pattern = Ppile(cat); /调用pattern对象的matcher方法得到matcher对象 Matcher matcher = pattern.matcher(one cat, two cats in the yard); /StringBuffer是可变字符串类StringBuffer sb = new StringBuffer(); /找到匹配的字符串cat,就将该字符串整体替换成”big cat” /找到第1个cat后,sb的值为“one big cat”,找到第2个cat后,sb的值为“one big cat, two big cat” while(matc

7、her.find() matcher.appendReplacement(sb, big $0); /将后面的”s in the yard”加到sb后面,即“one big cat, two big cats in the yard” matcher.appendTail(sb); System.out.println(sb.toString(); 2.4 从文档中找到自己需要的信息(非常重要)从文档中找到自己需要的信息非常重要,比如从网页的内容中找到链接的网址,或从视频文件信息中找到视频文件的时长等等,下面的例子演示如何从网页的内容中找到链接的网址。import java.util.rege

8、x.*;class RegexHref public static void main(String args) / s*(href|src)s* 代表(href|src)前面、后面有0或多个空格 / =后面s*(*)代表”开头,0或多个非”,”结尾的组 / |(*),表示或者 之间的字符/ (s+)String patternString = s*(href|src)s*=s*(*)|(*)|(s+); /测试的网页内容String text = bbb img src= ccc; Pattern pattern = Ppile(patternString,Pattern.CASE_INSE

9、NSITIVE); Matcher matcher = pattern.matcher( text ); StringBuffer buffer = new StringBuffer(); while (matcher.find() /整个捕获,相当于goup(0) buffer.append(获捕到 + matcher.group(); /捕获中的一部分(第2对圆括号对应的,即是网址) buffer.append( 其中网址为 + matcher.group(2); buffer.append(rn); System.out.println(buffer.toString(); 2.5更多正

10、则表达式的例子参考:(1)匹配美国的社会安全号码假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是123-12-1234。用来匹配它的正则表达式如图1所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“”。图1 匹配所有123-12-1234形式的社会安全号码【注意:但在Java中连字符-不需要转义符】在Java中匹配的模式写为:String pattern1 = 0-93-0-92-0-9d4;/或通过预定义的字符d来简化,但需要加转义符,所以是dString pattern1 =

11、d3-d2-d4;假设进行搜索的时候,你希望连字符号可以出现,也可以不出现即,999-99-9999和999999999都属于正确的格式。这时,你可以在连字符号后面加上“?”数量限定符号,如图2所示:String pattern2 = 0-93-?0-92-?0-9d4;String pattern2 = d3-?d2-?d4;(2)匹配上海的汽车牌照号码上海汽车牌照的一种格式是沪+A-Z.五个字符,如沪A.25F63,沪B.88888等。在Java中匹配的模式写为:String pattern = 沪A-Z.w5;(3)将字符串中的生日信息中提取出年、月、日的信息假设要从格式为“June 2

12、6, 1951”的生日日期中提取出年月日信息在Java中匹配的模式写为:String pattern =(a-z+)s*(0-91,2),s*(0-94);import java.util.regex.*;public class RegexBirthday public static void main(String args) String patternString=(a-z+)s*(0-91,2),s*(0-94); String text = Miles was born on June 2, 1978 in Ningbo; Pattern pattern = Ppile(patte

13、rnString, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher( text ); /StringBuffer buffer = new StringBuffer(); String year = null; String month = null; String day = null; while(matcher.find() month = matcher.group(1); day = matcher.group(2); year = matcher.group(3); System.out.println(Mi

14、les birthday is + year + + month + + day ); 程序输出:Miles birthday is 1978 June 2(4)匹配HTML分析HTML页面内FONT标记的所有属性。HTML页面内典型的FONT标记如下所示:程序需要输出如下键值对:face = Arial,Serifsize = +2color = red第1步提取出尖括号内的内容:第2步利用group,将属性分割成键值对3. 正则表达式的综合应用3.1简单的网络爬虫【源代码】import .URL;import java.io.*;import java.util.*;import java

15、.util.concurrent.*;import java.util.regex.*;import java.nio.charset.*;class URLCrawler public static void main(String args)throws Exception /并发队列 final ConcurrentLinkedQueue urls = new ConcurrentLinkedQueue(); urls.add( ); int cnt=0; while(!urls.isEmpty() final String url = urls.poll(); System.out.p

16、rintln(url); /启动匿名线程 new Thread() public void run() try String content = download(new URL(url), gb2312);/下载网页内容 List moreUrl = parse( content ); /解析网址 urls.addAll(moreUrl); catch(Exception ex) ex.printStackTrace(); .start(); if(cnt+10) break; /当爬到的网址内容超过10个,停止 try Thread.sleep(4000); catch(Interrupt

17、edException ex) static List parse(String text) String patternString = s*hrefs*=s*(*)|(*)|(s+)s*; Pattern pattern = Ppile(patternString, Pattern.CASE_INSENSITIVE ); Matcher matcher = pattern.matcher( text ); List list = new ArrayList(); while (matcher.find() String href = matcher.group(1); href = hre

18、f.replaceAll(,).replaceAll(,); if(href.startsWith(http:) ) list.add(href); return list; /下载网页内容 static String download( URL url, String charset)throws Exception try(InputStream input = url.openStream(); ByteArrayOutputStream output = new ByteArrayOutputStream() byte data = new byte1024; int length;

19、while(length=input.read(data)!=-1) output.write(data,0,length); byte content = output.toByteArray(); return new String(content, Charset.forName(charset); 3.2网站日志分析Apache HTTP日志服务器的标准日志:127.0.0.1 - frank 10/Oct/2000:13:55:36 -0700 GET /apache_pb.gif HTTP/1.0 200 2326如何提取IP和访问日期信息?String patternIP =d1

20、,3.d1,3.d1,3.d1,3;String patternDate =+;【源代码】import java.util.regex.*;public class RegexLog public static void main(String args) String patternIP =d1,3.d1,3.d1,3.d1,3; String patternDate =+; String text = 127.0.0.1 - frank 10/Oct/2000:13:55:36 -0700 + +GET /apache_pb.gif HTTP/1.0 + +200 2326; Patter

21、n pattern1 = Ppile(patternIP, Pattern.CASE_INSENSITIVE); Pattern pattern2 = Ppile(patternDate, Pattern.CASE_INSENSITIVE); Matcher matcher1 = pattern1.matcher( text ); Matcher matcher2 = pattern2.matcher(text); String ip = null; String date = null; while(matcher1.find() ip = matcher1.group(); System.out.println(IP is + ip ); while(matcher2.find() date = matcher2.group(); System.out.println(Date is + date ); 程序输出:IP is 127.0.0.1Date is 10/Oct/2000:13:55:36 -07004. 结束语许多语言,包括Perl、PHP、Python、JavaScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。本文只是列出了正则表达式一些常见的应用,要精通正则表达式还需要多多编程实践。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2