正则

    xiaoxiao2021-03-25  100

     正则表达式 正则表达式:符合一定规则的表达式。     作用:用于专门操作字符串。     特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。     所以学习正则表达式,就是在学习一些特殊符号的使用。     好处:可以简化对字符串的复杂操作。     弊端:符号定义越多,正则越长,阅读性越差。 具体操作功能: 1,匹配:String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。 2,切割:String split(); 3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。 字符类 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) [a-z&&[def]] d、e 或 f(交集) [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 预定义字符类 . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9]  注意\d 是转义字符使用时要\\d  下面的都是这样 \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] 注意\d 是特殊字符使用时要\\d使其变成转义字符  下面的都是这样  自己设置的转义字符都是 \.变成转义一个新的字符再\\.变成转义字符 匹配 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16   public static void checkTel()      {          String tel =  "16900001111" ;          String telReg =  "1[358]\\d{9}" ;           System.out.println(tel.matches(telReg));      }        public static void demo()      {          String str =  "b23a23456789" ;            String reg =  "[a-zA-Z]\\d*" ;              boolean b= str.matches(reg);          System.out.println(b);      } /*      需求:对邮件地址进行校验。     */     public static void checkMail()     {         String mail = " abc12@sina.com";         mail = " 1@1.1";         String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。 (\\.[a-zA-Z]+)+封装成组一次或多次         reg = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。         //mail.indexOf("@")!=-1         System.out.println(mail.matches(reg));     } 切割 1 2 3 4 5 6 7 8 9 10 11 public static void splitDemo(String str,String reg)      {                    //String reg = " +";//按照多个空格来进行切割          String[] arr = str.split(reg);            System.out.println(arr.length);          for (String s : arr)          {              System.out.println(s);          }      }            splitDemo("zhangsan.lisi.wangwu","\\.");         splitDemo("c:\\abc\\a.txt","\\\\");         splitDemo("erkktyqqquizzzzzo","(.)\\1+");                                                      //按照叠词完成切割。为了可以让规则的结果被重用                                                    //可以将规则封装成一个组。用()完成。组的出现都有编号。                                                    //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。注意要转义字                                                     符所以\\1 替换 1 2 3 4 5 6 public static void replaceAllDemo(String str,String reg,String newStr)      {          str = str.replaceAll(reg,newStr);            System.out.println(str);      }        String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数组替换成#。          replaceAllDemo(str,"\\d{5,}","#");         String str1 = "erkktyqqquizzzzzo";//.  //将重叠的字符替换成单个字母。zzzz->z         replaceAllDemo(str1,"(.)\\1+","$1");  $是特殊字符可以表示组  若要使用$则用//$ 获取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 /* 正则表达式的第四个功能。 4,获取:将字符串中的符合规则的子串取出。   操作步骤: 1,将正则表达式封装成对象。 2,让正则对象和要操作的字符串相关联。 3,关联后,获取正则匹配引擎。 4,通过引擎对符合规则的子串进行操作,比如取出。 */ import java.util.regex.*;   class RegexDemo2  {      public static void main(String[] args)       {          getDemo();      }      public static void getDemo()      {          String str =  "ming tian jiu yao fang jia le ,da jia。" ;          System.out.println(str);          String reg =  "\\b[a-z]{4}\\b" ;            //将规则封装成对象。          Pattern p = Pattern.compile(reg);            //让正则对象和要作用的字符串相关联。获取匹配器对象。          Matcher m  = p.matcher(str);            System.out.println(m.matches()); //其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。                                          //只不过被String的方法封装后,用起来较为简单。但是功能却单一。          while (m.find()) //将规则作用到字符串上,并进行符合规则的子串查找          {              System.out.println(m.group()); //(m.group());//用于获取匹配后结果。              System.out.println(m.start()+ "...." +m.end());          }      } } 网页爬虫 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 class RegexTest2  {      public static void main(String[] args) throws Exception      {          getMails_1();      }          public static void getMails_1()throws Exception      {          URL url =  new  URL( "http://192.168.1.254:8080/myweb/mail.html" );            URLConnection conn = url.openConnection();            BufferedReader bufIn =  new  BufferedReader( new  InputStreamReader(conn.getInputStream()));                    String line =  null ;            String mailreg =  "\\w+@\\w+(\\.\\w+)+" ;          Pattern p = Pattern.compile(mailreg);                        while ((line=bufIn.readLine())!= null )          {              Matcher m = p.matcher(line);              while (m.find())              {                  System.out.println(m.group());              }          }      }  正则表达式 正则表达式:符合一定规则的表达式。     作用:用于专门操作字符串。     特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。     所以学习正则表达式,就是在学习一些特殊符号的使用。     好处:可以简化对字符串的复杂操作。     弊端:符号定义越多,正则越长,阅读性越差。 具体操作功能: 1,匹配:String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。 2,切割:String split(); 3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。 字符类 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) [a-z&&[def]] d、e 或 f(交集) [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 预定义字符类 . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9]  注意\d 是转义字符使用时要\\d  下面的都是这样 \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] 注意\d 是特殊字符使用时要\\d使其变成转义字符  下面的都是这样  自己设置的转义字符都是 \.变成转义一个新的字符再\\.变成转义字符 匹配 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16   public static void checkTel()      {          String tel =  "16900001111" ;          String telReg =  "1[358]\\d{9}" ;           System.out.println(tel.matches(telReg));      }        public static void demo()      {          String str =  "b23a23456789" ;            String reg =  "[a-zA-Z]\\d*" ;              boolean b= str.matches(reg);          System.out.println(b);      } /*      需求:对邮件地址进行校验。     */     public static void checkMail()     {         String mail = " abc12@sina.com";         mail = " 1@1.1";         String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。 (\\.[a-zA-Z]+)+封装成组一次或多次         reg = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。         //mail.indexOf("@")!=-1         System.out.println(mail.matches(reg));     } 切割 1 2 3 4 5 6 7 8 9 10 11 public static void splitDemo(String str,String reg)      {                    //String reg = " +";//按照多个空格来进行切割          String[] arr = str.split(reg);            System.out.println(arr.length);          for (String s : arr)          {              System.out.println(s);          }      }            splitDemo("zhangsan.lisi.wangwu","\\.");         splitDemo("c:\\abc\\a.txt","\\\\");         splitDemo("erkktyqqquizzzzzo","(.)\\1+");                                                      //按照叠词完成切割。为了可以让规则的结果被重用                                                    //可以将规则封装成一个组。用()完成。组的出现都有编号。                                                    //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。注意要转义字                                                     符所以\\1 替换 1 2 3 4 5 6 public static void replaceAllDemo(String str,String reg,String newStr)      {          str = str.replaceAll(reg,newStr);            System.out.println(str);      }        String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数组替换成#。          replaceAllDemo(str,"\\d{5,}","#");         String str1 = "erkktyqqquizzzzzo";//.  //将重叠的字符替换成单个字母。zzzz->z         replaceAllDemo(str1,"(.)\\1+","$1");  $是特殊字符可以表示组  若要使用$则用//$ 获取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 /* 正则表达式的第四个功能。 4,获取:将字符串中的符合规则的子串取出。   操作步骤: 1,将正则表达式封装成对象。 2,让正则对象和要操作的字符串相关联。 3,关联后,获取正则匹配引擎。 4,通过引擎对符合规则的子串进行操作,比如取出。 */ import java.util.regex.*;   class RegexDemo2  {      public static void main(String[] args)       {          getDemo();      }      public static void getDemo()      {          String str =  "ming tian jiu yao fang jia le ,da jia。" ;          System.out.println(str);          String reg =  "\\b[a-z]{4}\\b" ;            //将规则封装成对象。          Pattern p = Pattern.compile(reg);            //让正则对象和要作用的字符串相关联。获取匹配器对象。          Matcher m  = p.matcher(str);            System.out.println(m.matches()); //其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。                                          //只不过被String的方法封装后,用起来较为简单。但是功能却单一。          while (m.find()) //将规则作用到字符串上,并进行符合规则的子串查找          {              System.out.println(m.group()); //(m.group());//用于获取匹配后结果。              System.out.println(m.start()+ "...." +m.end());          }      } } 网页爬虫 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 class RegexTest2  {      public static void main(String[] args) throws Exception      {          getMails_1();      }          public static void getMails_1()throws Exception      {          URL url =  new  URL( "http://192.168.1.254:8080/myweb/mail.html" );            URLConnection conn = url.openConnection();            BufferedReader bufIn =  new  BufferedReader( new  InputStreamReader(conn.getInputStream()));                    String line =  null ;            String mailreg =  "\\w+@\\w+(\\.\\w+)+" ;          Pattern p = Pattern.compile(mailreg);                        while ((line=bufIn.readLine())!= null )          {              Matcher m = p.matcher(line);              while (m.find())              {                  System.out.println(m.group());              }          }      }
    转载请注明原文地址: https://ju.6miu.com/read-16784.html

    最新回复(0)