JAVA中常用的正则的一些案例分析
2015-09-24 17:51
495 查看
JAVA当中的正则还是非常有的,在这里通过代码的方式整理一些JAVA代码,然后分享给大家,可以作为一个参考
1、案例分析1
2、案例分析2
3、案例分析3
1、案例分析1
package jfyun; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public class Test01 { /** * 句点符号:想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束 * 完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton” */ @Test public void test1(){ String info = "ten"; Pattern p = Pattern.compile("t.n"); Matcher m = p.matcher(info); if(m.find()){ String group = m.group(); System.out.println(group); } } /** * 方括号符号:方括号(“[]”)里面指定看来有意义的字符,方扩号,因为方括号只允许匹配单个字符 * 正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton” */ @Test public void test2(){ String info = "ten"; Pattern p = Pattern.compile("t[aeio]n"); Matcher m = p.matcher(info); while(m.find()){ String group = m.group(); System.out.println(group); } } /** * “或”符号:“|”操作符的基本意义就是“或”运算 * 使用圆括号“()”。圆括号还可以用来分组。方扩号,因为方括号只允许匹配单个字符 */ @Test public void test3(){ String info = "teen"; Pattern p = Pattern.compile("t(a|ee|i|o)n"); Matcher m = p.matcher(info); while(m.find()){ String group = m.group(); System.out.println(group); } } /** * 表示匹配次数的符号 * 假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999 */ @Test public void test4(){ String info = "102-12-8901"; Pattern p= Pattern.compile("([\\d]{3})\\-([\\d]{2})\\-([0-9]{4})"); Matcher m = p.matcher(info); if(m.find()){ System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); } } /** * 匹配所有123-12-1234和123121234形式的社会安全号码 */ @Test public void test5(){ String info = "123-12-1234"; Pattern p= Pattern.compile("([\\d]{3})\\-?([\\d]{2})\\-?([0-9]{4})"); Matcher m = p.matcher(info); if(m.find()){ System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); } } /** * 美国汽车牌照的一种格式是四个数字加上二个字母 * 匹配典型的美国汽车牌照号码,如8836KV */ @Test public void test6(){ String info = "8836KV"; Pattern p= Pattern.compile("([\\d]{4})([A-Z]{2})"); Matcher m = p.matcher(info); if(m.find()){ System.out.println(m.group(1)); System.out.println(m.group(2)); } } /** * 圆括号和空白符号 * 从格式为“June 26, 1951”的生日日期中提取出月份部分 * 匹配所有Month DD,YYYY格式的日期 */ @Test public void test7(){ String info = "June 26, 1951"; Pattern p = Pattern.compile("([\\w]+)\\s+([\\d]{1,2}),\\s*([\\d]{4})"); Matcher m = p.matcher(info); if(m.find()){ System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); } } }
2、案例分析2
package jfyun; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public class Test02 { String info="27.19.74.143 - - [30/Mar/2015:17:38:20 +0800] \"GET /static/image/common/faq.gif HTTP/1.1\" 200 1127"; @Test public void test() { } /** * 查找以Java开头,任意结尾的字符串 * output result: true false */ @Test public void test1(){ Pattern p = Pattern.compile("^Java.*$"); Matcher m = p.matcher("Java是一门开发语言"); boolean b = m.matches();//当条件满足时,将返回true,否则返回false System.err.println(b); m = p.matcher("查询Java是一门开发语言"); b = m.matches(); System.err.println(b); } /** * 以多条件分割字符串时。 以 , 或者 | 为分割字符串 * output result: java world sun ok */ @Test public void test2(){ Pattern p = Pattern.compile("[,||]+");//匹配字符串中 , | 字符串 String[] split = p.split("java,,world|sun||ok");// 以,|切割字符串 for (String str : split) { System.out.println(str); } } /** * 文字替换(首次出现字符) * output: ruby 是一门语言,一定要学习好java */ @Test public void test3(){ Pattern p = Pattern.compile("java"); Matcher m = p.matcher("java 是一门语言,一定要学习好java"); String replaceFirst = m.replaceFirst("ruby"); System.err.println(replaceFirst); } /** * 验证是否为邮箱地址 * [\\w-.] 表示匹配字符或者-或者. * output: true */ @Test public void test4(){ String info = "a-b.A1-23_4@yahoo.com.cn"; Pattern p = Pattern.compile("[\\w-.]+@([\\w]+\\.)+([\\w]+)",Pattern.CASE_INSENSITIVE);//Pattern.CASE_INSENSITIVE 表达式忽略大小写进行匹配 Matcher m = p.matcher(info); System.out.println(m.matches()); } /** * 去除html标记 */ @Test public void test5(){ String info = "<a href=\"/index.html\">主页</a>"; //获取“主页” ,去除所有的标签 Pattern p = Pattern.compile("<.*?>"); Matcher m = p.matcher(info); String str = m.replaceAll(""); System.out.println(str); } /** * 获取对应的url */ @Test public void test6(){ Pattern p = Pattern.compile("(http|https){1}(://){1}[\\w\\.\\/]+"); Matcher m = p.matcher("<a href=\"http://jf.10086.cn/ware/111.html\"></a>"); StringBuffer buffer = new StringBuffer(); while(m.find()){ buffer.append(m.group()); String protocal = m.group(1); System.out.println(protocal); System.out.println(buffer.toString()); } } }<strong> </strong>
3、案例分析3
package jfyun; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public class Test03 { /** * 分析一个Web服务器日志文件,确定每一个用户花在网站上的时间 * * output: ip=>27.19.74.143 date=>30/Mar/2015:17:38:20 method=>GET url=>/static/image/common/faq.gif protocol=>HTTP/1.1 status=>200 flow=>1127 */ @Test public void test() { String info = "27.19.74.143 - - [30/Mar/2015:17:38:20 +0800] \"GET /static/image/common/faq.gif HTTP/1.1\" 200 1127"; StringBuffer regexp = new StringBuffer() .append("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})[\\s]*")//ip地址 .append("\\s-\\s-\\s")//为了匹配“- -”(但不提取它),正则表达式中间加入了“\s-\s-\s” .append("\\[(.*?)\\s*[-+0-9]*?\\][\\s]*")//[ 和 ] 有特殊含义,故需要转义 .append("\"(.*?)\"[\\s]*")// 请求 .append("(.*)[\\s]+")//状态码 .append("(.*)");//流量 Pattern p = Pattern.compile(regexp.toString()); Matcher m = p.matcher(info); if(m.find()){ String ip = m.group(1); String date = m.group(2); System.out.println("ip=>"+ip); System.out.println("date=>"+date); Pattern pp = Pattern.compile("(.*)[\\s]+(.*)[\\s]+(.*)[\\s]*"); Matcher mm = pp.matcher(m.group(3)); if(mm.find()){ String method = mm.group(1); String url = mm.group(2); String protocol = mm.group(3); System.out.println("method=>"+method); System.out.println("url=>"+url); System.out.println("protocol=>"+protocol); } String status = m.group(4); System.out.println("status=>"+status); String flow = m.group(5); System.out.println("flow=>"+flow); } } /** * output : GET /static/image/common/faq.gif HTTP/1.1 */ @Test public void test4(){ String info = "GET /static/image/common/faq.gif HTTP/1.1"; Pattern p = Pattern.compile("(.*)[\\s]+(.*)[\\s]+(.*)[\\s]*"); Matcher m = p.matcher(info); if(m.find()){ String group = m.group(1); String group2 = m.group(2); String group3 = m.group(3); System.out.println(group); System.out.println(group2); System.out.println(group3); } } }<strong> </strong>
相关文章推荐
- Java的四种引用,强弱软虚,用到的场景
- [Spring]Spring AOP学习笔记(4)--Spring 事务
- JAVA中注解的简单使用
- Java中的反射机制 一个利用反射进行对象拷贝的例子
- 第一章 Java Web工作原理
- java get,post 请求
- java中的split函数用法
- jd -eclipse 放到eclipse 中进行自动反编译
- java线性查找、二分查找(2015年9月23日)
- SSH整合 简单的增删改查
- 第12章 Java内存模型与线程
- Ubuntu14.04安装JDK与配置环境变量
- 数字可以为正数或负数(可以含有小数点) java
- 得到JAVA项目根文件夹
- Java序列化与反序列化的几种方式
- eclipse下搭建SSH整合环境(Struts2+Spri 4000 ng+Hibernate+maven)
- springMVC教程中级(四)Controller中级篇1(回传、批量)
- Struts-文件上传
- JAVA CACHE
- Java SE EE ME