正则表达式
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; } }
转载请注明出处:正则表达式