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;

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值