正则表达式
发布时间:2020-12-13 19:51:06 所属栏目:百科 来源:网络整理
导读:正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,简化书写,所以学习正则表达式,就是在学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作 弊端:符号定义越多,正则越长,阅读性越差 具体操作功能:
正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,简化书写,所以学习正则表达式,就是在学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作 弊端:符号定义越多,正则越长,阅读性越差 具体操作功能: 1. 匹配: String matches方法,用规则匹配整个字符串,只要一出匹配不符合就匹配结束,返回false 2. 切割:String split(Stringregex) 3. 替换:StringreplaceAll(); 4. 获取( 操作步骤: 1. 将正则表达式封装成对象 2. 让正则对象和要操作的字符串相关联 3. 关联后,获取正则匹配引擎 4. 通过引擎对符合规则的子串进行操作,比如取出. package mypackage.regex; import static system.out.Sop.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo { public static void main(String[] args) { //checkQQ("1237676"); //checkTel("13789354946"); //splitDemo("zhangsan.lisi.wangwu","."); // splitDemo("c:abca.txt","\"); // splitDemo("fsaflkfjlkqqfdskkkkksoladsdf","(.)1+");// // 按照叠词分割,为了可以让规则的结果被重用 // 可以将规则封装成一个组,用()完成,组的出现都有编号,从1开始,想要使用已有的组可以通过n的形式来获取 // String str ="wer1399873298ty29320920sdi345ouiw4348799283f"; // replaceAllDemo(str,"d{5,}","#"); // 将连续的多余5个的数字替换成# // String str1 = "erkkktyqqqquizzzzzo"; // replaceAllDemo(str1,"(.)1+","&");// 将叠词替换成&号 // replaceAllDemo(str1,"$1"); // 将叠词替换成单个的字母zzzz->z // $符合在组外引用组 getDemo(); } // 获取 private static void getDemo() { String str = "ming tianjiu yao fangjia le,da jia"; String reg = "b[a-z]{3}"; // 将正则表达式封装成对象 Pattern p = Pattern.compile(reg); // 让正则对象和要操作的字符串相关联,获取正则匹配引擎 Matcher m = p.matcher(str); // 通过引擎对符合规则的子串进行操作,比如取出 while (m.find()) { sop(m.group()); } } // 替换 private static void replaceAllDemo(String str,String regex,String replacement) { str = str.replaceAll(regex,replacement); sop(str); } // 切割 private static void splitDemo(String str,String regex) { String[] arr = str.split(regex); sop(arr.length); for (String s : arr) { sop(s); } } // 匹配 private static void checkTel(String str) { String regex = "1[358]d{9}"; boolean flag = str.matches(regex); if (flag) sop(str + "...isok"); else sop(str + "...不合法"); } // 匹配 private static void checkQQ(String str) { String regex = "[1-9]d{4,14}"; boolean flag = str.matches(regex); if (flag) sop(str + "...isok"); else sop(str + "...不合法"); } } 正则表达式的练习: package mypackage.regex; import java.util.TreeSet; public class RegexTest { public static void main(String[] args) { // test(); // test_1(); checkMail(); } private static void checkMail() { String mail = "676759829@qq.com"; String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(.[a-zA-Z]+)+"; System.out.println(mail.matches(regex)); } private static void test_1() { String ip = "192.68.1.254102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30"; ip = ip.replaceAll("(d+)","00$1"); System.out.println(ip); ip = ip.replaceAll("0*(d{3})","$1"); System.out.println(ip); String[] arr = ip.split(" +"); TreeSet<String> ts = new TreeSet<String>(); for (String s : arr) { ts.add(s); } for (String s : ts) { System.out.println(s.replaceAll("0*(d+)","$1")); } } private static void test() { String str = "我我....我我...要要要....要要....学学学...学..学学...编编编...编..程程程...程程.."; str = str.replaceAll(".+",""); System.out.println(str); str = str.replaceAll("(.)1+","$1"); System.out.println(str); } } 网页爬虫:
package mypackage.regex; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PagePaiChong { public static void main(String[] args) throws Exception { getMail(); } private static void getMail() throws Exception { URL url = new URL("http://www.baidu.com"); URLConnection conn = url.openConnection(); BufferedReader bufin = new BufferedReader(new InputStreamReader( conn.getInputStream())); String regex = "w+@(.w+)+"; Pattern p = Pattern.compile(regex); Matcher m; String line = null; while ((line = bufin.readLine()) != null) { m = p.matcher(line); while (m.find()) { System.out.println(m.group()); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |