zoukankan      html  css  js  c++  java
  • java 正则表达式学习

    一、 Java正则表达式

        在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂。 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
        自从jdk1.4推出java.util.regex包,为我们提供了很好的JAVA正则表达式应用平台。

    二、 正则表达式

       如果想知道有多少种正则表达式,则可以观察java.util.regex包中的Pattern类,里面列出了全部的正则表达式内容。

    1.逻辑运算符:

    |:管道符.如:x|y表示x或y

    ():捕获组.(abc)|(xyz)表示abc或xyz

    2.边界匹配符:

    ^:从头匹配

    $:从尾匹配

    3.在正则表达式中具有特殊含义的字符

    特殊字符

    描述

        .

        表示任意一个字符

        [abc]

        表示abc中的任意一个字符

        [^abc]

        abc以外的任意一个字符

        [a-zA-z]

        介于az,或AZ中的任意一个字符

        s

        空白符(空格、tab、换行、换页、回车)

        S

        非空白符

        d

        任意一个数字[0-9]

        D

        任意一个非数字[^0-9]

        w

        词字符[a-zA-Z_0-9]

        W

        非词字符

     

    4.表示字符出现次数的符号

    表示次数的符号

    描述

        *

        0 次或者多次

        +

        1 次或者多次

        ?

        0 次或者 1

        {n}

        恰好 n

        {n, m}

        至少 n 次,不多于 m

    三、 实例

    1.字符串包含验证
    //
    查找以Java开头,任意结尾的字符串
    Pattern pattern = Pattern.compile("^Java.*");
    Matcher matcher = pattern.matcher("Java是一门编程语言");
    boolean b= matcher.matches();

    //当条件满足时,将返回true,否则返回false
    System.out.println(b);

    2. 多条件分割字符串
    Pattern pattern = Pattern.compile("[, |]+");
    String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
    for (int i=0;i<strs.length;i++) {
        System.out.println(strs[i]);}

    3.文字替换(首次出现字符)
    Pattern pattern = Pattern.compile("
    正则表达式");
    Matcher matcher = pattern.matcher("
    正则表达式 Hello World,正则表达式 Hello World");
    //替换第一个符合正则的数据
    System.out.println(matcher.replaceFirst("Java"));

    4.文字替换(全部)
    Pattern pattern = Pattern.compile("
    正则表达式");
    Matcher matcher = pattern.matcher("
    正则表达式 Hello World,正则表达式 Hello World");
    //替换第一个符合正则的数据
    System.out.println(matcher.replaceAll("Java"));

    5.文字替换(置换字符)
    Pattern pattern = Pattern.compile(“
    正则表达式”);
    Matcher matcher = pattern.matcher(“
    正则表达式 Hello World,正则表达式 Hello World ”);
    StringBuffer sbr = new StringBuffer();
    while (matcher.find()) {
        matcher.appendReplacement(sbr, “Java”);
    }

    6.验证是否为邮箱地址
    String email=“[\w\.\-]+@([\w\-]+\.)+[\w\-]+”;
    String str=”ceponline@yahoo.com.cn”;
    Pattern pattern = Pattern.compile
    (email,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    System.out.println(matcher.matches());

    比较严格的:

    email="^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$"

    7.网页时间提取

        /**

         *

         *@Title:extractsDate

         *@Description:提取网页时间

         *@param  inputStr2013-07-0113:38:162013063022:50:502013070113:46

         */

        publicstatic String extractsDate(String inputStr) {

           String strDate = "";

           Pattern p = Pattern

                  .compile("[0-9]{2,4}[|\-|/][0-9]{1,2}[|\-|/][0-9]{1,2}[|\s*][\s*][0-9]{1,2}[:][0-9]{1,2}");

           Pattern p2 = Pattern

           .compile("[0-9]{2,4}[|\-|/][0-9]{1,2}[|\-|/][0-9]{1,2}[|\s?|][0-9]{1,2}[:][0-9]{1,2}");

          

               Matcher m = p.matcher(inputStr);

               if(m.find()) {

                  if (!"".equals(m.group())) {

                      String date = m.group();

                      date = date.replaceAll("", "-");

                      date = date.replaceAll("", "-");

                      date = date.replaceAll("", "");

                      date = date.replaceAll("/", "-");

                      strDate = date;

                  }

               }

               else{

                  Matcher m2 = p2.matcher(inputStr);

                  while (m2.find()) {

                      if (!"".equals(m2.group())) {

                         String date = m2.group();

                         date = date.replaceAll("", "-");

                         date = date.replaceAll("", "-");

                         date = date.replaceAll("", " ");

                         date = date.replaceAll("/", "-");

                         strDate = date;

                      }

                  }

               }

           return strDate;

            }

    8.网址提取

    publicstaticvoid extractsURL2(String url2) throws IOException {

           HttpURLConnection url=null

           String htmladdr="http://news.163.com/special/0001220O/news_json.js";    

            try {  

                URL url1 = new URL(htmladdr);    

                url = (HttpURLConnection)url1.openConnection ();   

                url.connect();                     

           } catch (Exception e) {  

               e.printStackTrace();  

               return ;  

           }   

           String temp = null;

           String temp2 = "";

           if(url!=null){  

               InputStream stream;  

               stream = url.getInputStream();  

               BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); 

                try {

                  while ((temp = reader.readLine()) != null){ 

                       temp2 += temp;

                  }

               } catch (RuntimeException e) {

                  //e.printStackTrace();

               }   

                reader.close(); 

               

              

           }

           String ruleUrl = "http://[a-z]+.163.com/yy/mmdd/[\d]+/[\w]+.html"

           String urlFilter = urlFilterStrategy(ruleUrl);

           Pattern p = Pattern

                  .compile(urlFilter);

           Matcher m = p.matcher(temp2);

           while (m.find()) {

               if (!"".equals(m.group())) {

                  System.out.println(m.group());

               }

           }

       

        }

    publicstatic String urlFilterStrategy(String urlFilter) {

           Calendar calendar = Calendar.getInstance();

           String year = Integer.toString(calendar.get(calendar.YEAR))

                  .substring(2);

           String year2 = Integer.toString(calendar.get(calendar.YEAR));

           String month = "0" + Integer.toString(calendar.get(calendar.MONTH) + 1);

           month = month.substring(month.length() - 2);

           String day = "0"

                  + Integer.toString(calendar.get(calendar.DAY_OF_MONTH));

           day = day.substring(day.length() - 2);

           urlFilter = urlFilter.replaceAll("yyyy-mm-dd", year2+"-"+month+"-"+day);

           urlFilter = urlFilter.replaceAll("yyyy", year2);

           urlFilter = urlFilter.replaceAll("yy", year);

           urlFilter = urlFilter.replaceAll("mm", month);

           urlFilter = urlFilter.replaceAll("dd", day);

           return urlFilter;

        }

  • 相关阅读:
    scoket --- 练习
    网络编程---scoket使用,七层协议,三次挥手建连接,四次挥手断连接
    类的总复习
    面向对象 --- 类的绑定方法,面向对象高阶
    组合,访问限制机制,抽象类 --- 练习
    面向对象 --- 类的组合,封装,多态
    类的继承 --- 练习
    面向对象 --- 类的继承
    基于面向对象设计一个游戏
    请求头类型content-type
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3165577.html
Copyright © 2011-2022 走看看