您的位置:首页 > 编程语言 > Java开发

JAVA中常用的正则的一些案例分析

2015-09-24 17:51 495 查看
JAVA当中的正则还是非常有的,在这里通过代码的方式整理一些JAVA代码,然后分享给大家,可以作为一个参考

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: