您的位置:首页 > 其它

正则表达式

2016-01-23 09:58 127 查看
可随意转载使用,但请注明出处:正则表达式

正则表达式(匹配、切割、替换、获取)

public static void main(String[] args)
{

/*
* 1.匹配
* 正则表达式
* 验证是否为qq号
* 长度为5-15,开头不为0
*/
String qq = "595461241345352";

String regex = "[1-9][0-9]{4,14}"; //第一位为1-9, 第二位为0-9。【0-9】出现4-14次

boolean check = qq.matches(regex); //正则匹配返回结果为boolean类型
System.out.println(qq+"       "+check);

/*
* 切割
*/
String str = "zhangleittttwangfeimmmliudaren";

String regex2 = "(.)\\1+"; // ()数组 .代表任意字符  1代表第一组   \\转义  +至少一次
//上面的规则代表: 第一组的正则规则为任意字符出现至少一次

String[] result = str.split(regex2); //切割的数组放到result中
for (int i = 0; i < result.length; i++)
{
System.out.println(result[i]);
}

/*
*替换
*组的次序判断:数左括号就行
*/

String result3 = str.replaceAll("(.)\\1+","#"); //替换。str中出现次数连续大于1次的字符换成#
System.out.println(result3);

String result4 = str.replaceAll("(.)\\1+","$1"); //str中出现次数连续大于1次的字符换成 获取到的第一组字符 //$1获取第一组字符
System.out.println(result4);

//		上述打印结果如下:
//		zhanglei#wangfei#liudaren
//		zhangleitwangfeimliudaren

//练习: 电话号码显示格式为158****1546
String tel = "13689464561";
String telNew = tel.replaceAll("(\\d{3})(\\d{4})(\\d{4})","$1****$3");//思路:将电话号码分成三组,获取每组的值进行替换
System.out.println(telNew);

/*
* 获取
* 通过一个例子来学习获取
*
* 将字符串  "da jia hao, wo shi yi ge xin shou xue yuan "  中三个字符相连的单词打印
*/

String str4 = "da jia hao, wo shi yi ge xin shou xue yuan ";

String regex4 = "\\b[a-z]{3}\\b"; // 代表单词边界\\b

Pattern p = Pattern.compile(regex4); //封装
Matcher m = p.matcher(str4);		//匹配

while (m.find())
{
System.out.print(m.group()+"  "); //获取匹配的子序列
System.out.println(m.start()+": "+m.end()); //在原字符串中该打印字符开始和结束的位置

}
}

正则小例子练习



public static void main(String[] args)
{
ipSort();
}

/*
* ip 排序
* 195.1.635.16 3.3.36.2 265.46.987.0 192.1.23.546
*/
public static void ipSort()
{
String ip_str = "195.1.635.16 3.3.36.2 265.46.987.0 192.1.23.546 192.1.22.546";
System.out.println("原始\n"+ip_str);
System.out.println("-----------------");

ip_str = ip_str.replaceAll("(\\d+)", "00$1");  //补零 如: 00195.001.00635.0016 003.003.0036.002
ip_str = ip_str.replaceAll("0*(\\d{3})", "$1"); //每段保留三位数字
String[] ips = ip_str.split(" +");              //切出ip地址

TreeSet<String> sort = new TreeSet<String>(); //对象排序

//添加ip到sort对象中(sort自动排序)
for (String ip : ips)
{
sort.add(ip);
}
//打印排序后的ip
System.out.println("现在:");
for (String ip : sort)
{
System.out.println(ip.replaceAll("0*(\\d+)", "$1")); //将补全0的字段还原
}

}


正则小例子练习



package PRE;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Crawler
{

/**
* @param lyons
* getqqs() 获取qq群中所有成员的邮箱 (已从网页中获取HTML资源 放到本地  K:\Crawler.txt)
*
* getByWeb(); 网络获取qq群中所有成员的邮箱
*/
public static void main(String[] args) throws IOException
{
/*int count = 0;
//爬取本地文件
List<String> qqs = getqqs();

for (String qq : qqs)
{
System.out.print(qq.replaceAll("[(]([\\d]+)[)]", "$1@qq.com;")+"\t");
count+=1;
if (count%5 == 0)
{
System.out.println();
}
}
System.out.println();
System.err.println("----------");
System.out.println("本次爬取qq群中有效qq邮箱总数:"+count+"个");*/

/**
* 爬取网络文件
*/
int count = 0;
List<String> sources = getByWeb();

for (String source : sources)
{
System.out.print(source.replaceAll("[(]([\\d]+)[)]", "$1@qq.com;")+"\t");
count+=1;
if (count%5 == 0)
{
System.out.println();
}

}
System.out.println(count);
}

/*
* 本地爬取qq号!
*/

public static List<String> getqqs() throws IOException
{

List<String> list = new ArrayList<String>();

//		1.打开本地源文件
BufferedReader source = new BufferedReader(new FileReader("K:\\Crawler.txt"));
//		2.数据匹配
String regex = "[(]\\d+[)]";
Pattern p = Pattern.compile(regex);

String line = null;
while ( (line=source.readLine())!=null ) //打开的源文件数据每行有信息就进行匹配
{
Matcher m = p.matcher(line);
while (m.find())
{
//讲规则的数据都存储到集合中
list.add(m.group());
}
}
return list;
}

/**
* 爬取网页qq号
*
*/
private static List<String> getByWeb() throws IOException
{
List<String> list = new ArrayList<String>();

//		1.打开web源文件

URL url = new URL("http://localhost:8080/SuperMembershipGMS/Crawler2.html"); //url为qq群空间查看群成员地址。qq版本2016/1/24
BufferedReader source = new BufferedReader(new InputStreamReader(url.openStream()));

//		2.数据匹配
String regex = "[(]\\d+[)]";
Pattern p = Pattern.compile(regex);

String line = null;
while ( (line=source.readLine())!=null ) //打开的源文件数据每行有信息就进行匹配
{
Matcher m = p.matcher(line);
while (m.find())
{
//讲规则的数据都存储到集合中
list.add(m.group());
}
}
return list;
}
}

转载请注明出处:正则表达式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: