本篇文章是学习尚学堂的关于正则表达式的视频教程时,所做的笔记。供广大编程爱好者学习之用,也留给日后自己复习使用!

1.为什么要有正则表达式?

正则表达式可以方便的对数据进行匹配,可以进行更加复杂的字符串验证、拆分、替换功能。

例如,现在要判断一个字符串是否全部由数字构成,若不使用正则表达式,代码如下:

public static boolean isAllNum(String string){
        char[] charArr = string.toCharArray();
        for(char tempC : charArr){
            if(tempC < '0' || tempC > '9')    //判断每个字符是否在'0'~'9'之间
                return false;
        }
        return true;
    }

现在仅仅判断字符串是不是只由数字组成,如果稍微复杂一点,则代码将会更加庞大。

如果使用正则表达式,代码如下:

public static boolean isAllNum2(String string){
        if(Pattern.compile("[0-9]+").matcher(string).matches())
            return true;
        else
            return false;
    }

对于使用正则表达式的方法,其关键代码也就一行,即第二行。两段代码对比一下便会发现使用正则表达式的优势,特别是在对字符串处理逻辑比较复杂的时候,正则表达式的优势会更加突出。(代码的详细讲解我会在接下来的文章中慢慢道来O(∩_∩)O)。

2.Pattern类和Mattern类

Pattern类为正则表达式的编译表示形式,指定为字符串的正则表达式必须首先被编译为此类的实例,然后就可以将得到的模式用于创建一个Matcher对象。

Matcher为一个解释器,通过解释Pattern对正则表达式的匹配,然后调用matches方法获取匹配的结果。大家可能看得有点模糊,其实其基本的操作流程为:

Pattern p = Pattern.compile("[0-9]+"); //参数为正则表达式
Matcher m = p.matcher("aaaaab"); //参数为待匹配的字符序列
boolean b = m.matches(); //返回匹配结果
简写的形式也就是第一个例子中的形式:Pattern.compile(“正则表达式”).matcher(“待匹配的数据”).matches();
 
Pattern类中最常用的方法为:String[] strArr = split(CharSequence string);该方法用于将字符串string按照正则表达式的规则进行拆分,将拆分后的字符数组返回。
 
Matcher类中常用的方法:public boolean matches();//进行字符串的验证
                     public String replaceAll(String replacement);//进行字符串的替换
 

3.常用的正则规则

关于字符出现次数的问题(X表示一组规范):

举个例子:

例如:Pattern.compile("[0-9]").matcher(“123”).matches();

用[0-9]匹配字符串”123”的话,则结果返回false,因为[0-9]为一组规范,而之后什么都没有的话,则表示必须只出现一次,所以它匹配的字符串只能是一个字符,只有将字符串”123”改为”1”,则返回结果为true。

例如使用正则:[0-9]?,如果用这个正则去匹配一个空的字符串:””,返回结果为true,因为X?表示可以出现0次或者1次。

因此使用[0-9]+,则可以匹配任意大小的字符串。

再举个例子:使用正则表达式:[0-9]{2,},则这个正则表达式匹配的字符串只有其长度大于或等于2,并且字符串全部由数字组成才返回true;

例如我们在网上注册用户的时候,网站要求用户名为6-9位数字或字母,则可以使用正则[a-zA-Z0-9]{6,9}进行匹配。

关于逻辑运算符(X,Y表示一组规范)

为了帮助理解,下面用几个例子来验证一下上面的正则表达式规则:

例1:验证一个字符串是否是一个合法的日期格式(yyyy-MM-dd);

因为年为4为整数,月和日都为两位整数,中间用“-”号来分隔,因此正则表达式可以为:

”\\d{4}-\\d{2}-\\d{2}”

因为\d中的斜杠\不是转义字符,因此需要将其进行转义,故要两个斜杠

代码如下:

public static boolean isDate(String string){
        String regex = "\\d{4}-\\d{2}-\\d{2}";        //正则规则
        Pattern p = Pattern.compile(regex);            //创建Pattern对象,对正则进行编译
        Matcher m = p.matcher(string);                //创建Matcher对象
        return m.matches();
    }

例2:将字符串"Pairs32London0Beijing7893Hangzhou"中的英文单词拆分出来

代码如下;

//由字符串我们可以看出来,引文字符被数字分隔开来了,因此我们只要将数字当做分隔符即可
        String str = "Pairs32London0Beijing7893Hangzhou";
        Pattern p = Pattern.compile("\\d+");
        String[] strArr = p.split(str);
        for(String tempStr : strArr){
            System.out.println(tempStr);
        }

拆分结果为:

例3:将字符串“A B C D”中的所有空格替换为下划线”_”

代码如下:

/**
     * 将字符串"A B C D"中的空格替换为下划线"_"
     */
    public static void test2(){
        String string = "A B C D";
        String regex = "\\s";//匹配所有的空白字符,包括空格和换行
        Pattern p = Pattern.compile(regex);
        Matcher matcher = p.matcher(string);
        System.out.println(matcher.replaceAll("_"));
    }

4.String类对正则表达式的支持

在JDK1.4之后,Java对正则进行了一些扩充,在String类中开始直接支持正则的操作。

例如将“haha1heihei123xixi0”字符串中的所有数字替换为下滑线”_”:

String str = "haha1heihei123xixi0";
      str = str.replaceAll("\\d+", "_");
      System.out.println(str);

5.总结

1).使用正则可以方便的完成字符串的验证、拆分、替换等复杂功能。

2).在开发中一般都会直接使用String类中提供好的正则支持,而往往很少直接使用Pattern类和Matcher类

3).在正则应用的时候,对于一些敏感的字符要使用斜杠\转义。

Java基础巩固--正则表达式的更多相关文章

  1. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  2. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  3. java基础篇---正则表达式

    正则表达式在许多语言,例如Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能. 正则表达式是一种可以 ...

  4. 黑马程序员——【Java基础】——正则表达式

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1. 概念:符合一定规则的表达式. 2. 作用:用于专门操作字符串. 3. 特点:用一些特定的符 ...

  5. 黑马程序员——JAVA基础之正则表达式,网络爬虫

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 正则表达式: 概念:用于操作字符串的符合一定规则的表达式 特点:用于一些特定的符号来表示一些代码 ...

  6. Java基础(63):正则表达式的运用

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  7. java基础38 正则表达式

    1.常用的正则表达式  预定义字符类:.  任何字符(与行结束符可能匹配也可能不匹配) \d  数字:[0-9] \D  非数字: [^0-9] \s  空白字符:[ \t\n\x0B\f\r] \S ...

  8. 【Java基础】正则表达式

    目录 正则表达式 什么正则表达式 普通字符 预定义字符 特殊字符 数量限定字符 定位字符 选择符和分组 反向引用 预搜索 运算符的优先级 常用正则 附录 正则表达式 本文的大部分内容转载自正则表达式从 ...

  9. Java基础教程——正则表达式

    正则表达式·Regular Expression 正则表达式就是一个用于匹配字符串的模板,正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 主要用到的对象: java.util.rege ...

随机推荐

  1. poj 1236 Network of Schools【强连通求孤立强连通分支个数&&最少加多少条边使其成为强连通图】

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13800   Accepted: 55 ...

  2. GifView项目学习

    http://code.google.com/p/gifview/downloads/detail?name=GifViewDemo.rar&can=2&q= 加入jar包

  3. 【转】解决Cannot change version of project facet Dynamic web module to 2.5

    http://blog.csdn.net/steveguoshao/article/details/38414145 我们用Eclipse创建Maven结构的web项目的时候选择了Artifact I ...

  4. 在TextView使用部分颜色文字

    /** * change a part of string color. * * @param string * whole string. * @param subString * the sub ...

  5. 解决 子进程已安装的 post-removal脚本返回了错误号 100 的方法

    打开终端: $gksudo nautilus 进入目录: /var/lib/dpkg 删除: info info.bak (文件夹) 重建文件夹: info 之后重新安装 或删除就可以了.

  6. OC最实用的runtime总结,面试、工作你看我就足够了!

    前言 runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一些常用的方法功能,以实用为主,我觉得用到印象才是最深刻的,并且最后两个demo也是MJExtension ...

  7. 集合(Collection,set,list,map)

    package cn.hncu.col.col; import java.util.ArrayList;import java.util.Collection;import java.util.Has ...

  8. [Form Builder]内置函数execute_trigger、do_key详解

    转:http://yedward.net/?id=82 1.execute_trigger:用来运行一个指定的触发器,常用来运行用户自定义的触发器. 语法:procedure execute_trig ...

  9. 玩转html5<canvas>画图

    导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制 ...

  10. js 一个关于图片onload加载的事

    前几天一个项目让我头疼了很久,一个关于图片加载时的loading效果,因为不是太懂js,所以在网上各种找资料,但还是不理想,无赖苦心研究,终于有了一点眉目了,虽然个中还有一些道理不懂,至少目的达到了; ...