zoukankan      html  css  js  c++  java
  • java中的正则表达式

    一:介绍

    1.简单的匹配

    String中有一个matches方法。

     1 public class Test131 {
     2     public static void main(String[] args) {
     3         regexDemo();
     4     }
     5     public static void regexDemo(){
     6         String qqNum="0298278";
     7         //其中4,14是一个个数范围
     8         String regex="[1-9][0-9]{4,14}";
     9         boolean flag=qqNum.matches(regex);
    10         if(flag){
    11             System.out.println("ok");
    12         }else{
    13             System.out.println("error");
    14         }
    15     }
    16 }

    2.主要方法

      匹配 matches(regex)

      切割 split(regex)

      替换 replaceAll(regex,replacement)

        获取 特殊一点

    二:匹配matches(regex)

    1.主要的regex

      

    2.字符类表达式

      

    3.预定义字符类

      

    4.数量词

      

    5.程序

      程序结果是true。

     1 public class Test132 {
     2     public static void main(String[] args) {
     3         demo();
     4     }
     5     public static void demo()
     6     {
     7         String str = "b23a23456789";
     8         String reg = "[a-zA-Z]\d*[a-z]\d*";
     9         boolean b= str.matches(reg);
    10         System.out.println(b);
    11     }
    12 }

    三:切割split(regex)

    1.先写一个简单的程序

      使用,进行切割。

     1 public class Test133 {
     2     public static void main(String[] args) {
     3         splitDemo();
     4     }
     5     public static void splitDemo(){
     6         String str="zhangsan,lisi,wangwu";
     7         String regex=",";
     8         String[] name=str.split(regex);
     9         for(String n:name){
    10             System.out.println(n);
    11         }
    12     }
    13 }

    2.特殊的切割

      对 . 的切割

      对\\的切割

      对叠词的切割

     1 public class Test134 {
     2     public static void main(String[] args) {
     3         //pointDemo();
     4         //virguleDemo();
     5         reduplicatedDemo();
     6     }
     7     public static void pointDemo(){
     8         String str="zhangsan.lisi.wangwu";
     9         String regex="\.";
    10         String[] strs=str.split(regex);
    11         for(String n :strs){
    12             System.out.println(n);
    13         }
    14     }
    15     public static void virguleDemo(){
    16         String str="c:\abd\yy.txt";
    17         String regex="\\";
    18         String[] strs=str.split(regex);
    19         for(String n :strs){
    20             System.out.println(n);
    21         }
    22     }
    23     public static void reduplicatedDemo(){
    24         String str="mhuujoptttttqb";
    25         String regex="(.)\1+";
    26         String[] strs=str.split(regex);
    27         for(String n :strs){
    28             System.out.println(n);
    29         }
    30     }
    31 }

    四:替换replaceAll(regex,replacement)

    1.API

      

    2.程序

      将数字替换成#

      将叠词替换成&

      将叠词替换成单个单词

     1 public class Test135 {
     2     public static void main(String[] args) {
     3         //numDemo();
     4         //andDemo();
     5         sigleDemo();
     6     }
     7     /**
     8      * 将字符串替换成#
     9      */
    10     public static void numDemo(){
    11         String str="ghsgdgdgs2324oop996uuuu";
    12         String regex="\d{1,}";
    13         String result=str.replaceAll(regex, "#");
    14         System.out.println("result="+result);
    15     } 
    16     /**
    17      * 将叠词变成&
    18      */
    19     public static void andDemo(){
    20         String str="ghsssyjguuuu";
    21         String regex="(.)\1+";
    22         String result=str.replaceAll(regex, "&");
    23         System.out.println("result="+result);
    24     }
    25     /**
    26      * 将叠词变成单个单词
    27      */
    28     public static void sigleDemo(){
    29         String str="ghsssyjguuuu";
    30         String regex="(.)\1+";
    31         String result=str.replaceAll(regex, "$1");
    32         System.out.println("result="+result);
    33     }
    34 }

    五:获取

    1.操作步骤

      1,将正则表达式封装成对象。
      2,让正则对象和要操作的字符串相关联。
      3,关联后,获取正则匹配引擎。
      4,通过引擎对符合规则的子串进行操作,比如取出。

    2.程序

     1 import java.util.regex.Matcher;
     2 import java.util.regex.Pattern;
     3 public class Test136 {
     4     public static void main(String[] args) {
     5         groupDemo();
     6     }
     7     public static void groupDemo(){
     8         String str="yub jjjjj hhhh uuu oo sds";
     9         //其中的意思的单词边界匹配符
    10         String regex="\b[a-z]{3}\b";
    11         
    12         //将规则封装成对象
    13         Pattern p=Pattern.compile(regex);
    14         //关联,获取匹配器对象
    15         Matcher m=p.matcher(str);
    16         
    17         while(m.find()){
    18             String str1=m.group();
    19             System.out.println("str1="+str1);
    20         }
    21     }
    22 }

    3.运行结果

      

    六:网页爬虫

    1.介绍

      需要网络连接

     

    2.程序

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 import java.net.URL;
     5 import java.net.URLConnection;
     6 import java.util.regex.Matcher;
     7 import java.util.regex.Pattern;
     8 public class Test137 {
     9     public static void main(String[] args) throws Exception{
    10         urlDemo();
    11     }
    12     public static void urlDemo() throws Exception{
    13         //将main.html文件放在E盘下
    14         URL url = new URL("file:///E:/mail.html");
    15         URLConnection conn = url.openConnection();
    16     
    17         //获取网络上的数据
    18         BufferedReader bufIn = new BufferedReader(
    19                 new InputStreamReader(conn.getInputStream()));
    20         String line = null;
    21 
    22         String mailreg = "\w+@\w+(\.\w+)+";
    23         Pattern p = Pattern.compile(mailreg);
    24         while((line=bufIn.readLine())!=null)
    25         {
    26             Matcher m = p.matcher(line);
    27             while(m.find())
    28             {
    29                 System.out.println(m.group());
    30             }
    31         }
    32     }
    33 }

    3.运行结果

      

      

  • 相关阅读:
    windows live writer 测试
    2011518资金净流入
    做人真善美,做事拖后腿
    今日盘面分析2011517
    近期国际版概念(5月19日益盟消息回顾)
    linux 系统应用程序桌面图标显示及进程自启动
    C#中发送邮件(以ASP.NET为例)
    Jquery使用$.Post方法,本地可以,服务器错误的处理方法...
    Silverlight中使用动画的技巧
    Silverlight之Easing
  • 原文地址:https://www.cnblogs.com/juncaoit/p/6922847.html
Copyright © 2011-2022 走看看