`

Java基础巩固--正则表达式

    博客分类:
  • Java
阅读更多

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

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).在正则应用的时候,对于一些敏感的字符要使用斜杠\转义。

 

本文来源于:http://www.cnblogs.com/inghzhang/p/3881371.html

分享到:
评论

相关推荐

    电子书--正则表达式之道

    1. **基础概念**:首先介绍正则表达式的基础,包括字符类(如字母、数字、特殊字符)、量词(如*、+、?、{n,m})、定位符(^、$、\b、\B)等,以及如何使用转义字符(\)来处理特殊字符。 2. **元字符**:元字符是...

    Java正则表达式详细讲解

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。...在实际项目中,结合`MLDN魔乐JAVA_59正则表达式`中的实例和练习,将进一步巩固和提升你的技能。

    精通正则表达式&正则表达式经典实例

    9. **实例应用**:正则表达式广泛应用于文本编辑器(如vim、emacs)、编程语言(如JavaScript、Python、Java)和搜索引擎(如grep、findstr)。例如,用于验证邮箱格式、手机号码、提取URL等。 通过《精通正则...

    正则表达式正则表达式.zip

    正则表达式在不同的编程语言中可能有不同的实现和语法差异,例如Python的`re`模块、JavaScript的`RegExp`对象、Java的`Pattern`和`Matcher`类等。理解这些差异对于跨平台或跨语言使用正则表达式至关重要。 在实际...

    基于Java的源码-java多线程反射泛型及正则表达式学习笔记和源码.zip

    在这个基于Java的源码压缩包中,我们主要探讨四个核心概念:多线程、反射、泛型和正则表达式。这些是Java开发中的重要工具,对于理解和优化程序性能至关重要。 首先,多线程在Java中是一个基础且关键的概念,它允许...

    正则表达式 Regular Expression 正则表达式资料大全压缩包

    3. **Java**:`java.util.regex`包提供了`Pattern`和`Matcher`类来处理正则表达式。 4. **Perl**:Perl语言本身就深深植根于正则表达式,其内建的正则功能非常强大。 应用实例: 1. **电子邮件验证**:使用正则...

    JAVA正则表达式实例教程.rar

    一、Java正则表达式基础 Java正则表达式基于Perl 5的模式匹配规则,通过`java.util.regex`包提供的类和接口实现。核心类有`Pattern`和`Matcher`,它们分别用于编译正则表达式和执行匹配操作。 1. `Pattern`: 此类...

    Java正则表达式教程

    Java正则表达式教程 Java正则表达式是Java编程语言中的一个重要组成部分,它提供了强大的文本处理能力,...结合"Java.Regex.Tutorial"这个教程,你可以深入理解每个知识点,并通过实践巩固和提升你的正则表达式技能。

    精通正则表达式(第三版)简体中文.pdf

    5. **正则表达式引擎的差异**:书中讨论了不同的正则表达式引擎(如Perl、JavaScript、Java、.NET等)之间的差异,这对于跨平台开发或使用不同语言的开发者来说非常重要。 6. **实战应用**:书中包含大量实例,涵盖...

    精通正则表达式(第3版)中英文

    本书的第三版涵盖了各种正则表达式引擎的差异,包括Perl、JavaScript、Java、.NET、PCRE(Perl兼容正则表达式)等。作者详细解释了如何构建复杂的模式,如使用量词(*、+、?、{n,m})来指定重复次数,使用分组(())...

    正则表达式教程

    - 在大多数编程语言中,都有内置的正则表达式支持,如JavaScript的`RegExp`对象,Python的`re`模块,Java的`Pattern`和`Matcher`类等。 通过学习以上基本概念,并结合实践,你将能够熟练地使用正则表达式进行字符...

    精通正则表达式 第三版 PDF+CHM两种版本

    《精通正则表达式》第三版不仅详尽介绍了正则表达式的语法,还提供了大量的实战示例和练习,帮助读者巩固理论知识,提升实战能力。无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的指导。通过深入研读,你将...

    正则表达式系统教程【CHM手册】

    3. Java:`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来处理正则表达式。 4. PHP:使用 `preg_match`, `preg_match_all`, `preg_replace` 等函数。 5. C#:`System.Text.RegularExpressions` 命名空间...

    正则表达式学习资料差一个字写点废话吧

    正则表达式是一种强大...例如,`正则表达式.chm`可能是关于正则表达式的帮助文档,`wz.pptx`可能是正则表达式的教学演示文稿,而`send.txt`可能包含了一些练习案例,这些资源将有助于进一步巩固和实践正则表达式知识。

    正则表达式 个人感觉非常使用的版本

    本资源包含一个英文版的正则表达式教程,尽管是英文版,但对有一定基础的开发者来说,理解起来并不困难,因为它涵盖了正则表达式的基本概念和常用语法。 正则表达式的核心概念包括: 1. **字符集**:用于表示一组...

    Regular_Expressions_正则表达式-英文版-带详细目录书签.pdf

    在“Regular_Expressions_正则表达式-英文版-带详细目录书签.pdf”这本书中,读者将能够找到关于正则表达式的详细概念解释,以及大量实例和练习,帮助巩固理解。书中的详细目录书签使得查找特定主题变得更加便捷。...

    java正则表达式的简单总结共20页.pdf.zip

    这份“java正则表达式的简单总结共20页.pdf.zip”文档很可能包含了对Java正则表达式的基础知识、核心概念、常用语法以及实践示例的详尽解释。 首先,让我们了解正则表达式的基本元素: 1. 字符:正则表达式由各种...

    JAVA 正则表达式总结_V2

    1. **正则表达式基础** - **字符类**:包括`[]`内的单个字符,如 `[abc]` 匹配 'a','b' 或 'c'。 - **量词**:如 `*`,`+`,`?` 和 `{n,m}` 控制匹配次数。`*`表示零次或多次,`+`表示一次或多次,`?`表示零次或...

    神奇的匹配+正则表达式求精之旅(王蕾).rar

    书中会详细介绍如何在各种编程语言如Python、Java、JavaScript中使用正则表达式,包括内置函数、模块和API的用法。例如,Python的re模块提供了match、search、findall、sub等方法来执行不同的匹配和替换操作。 此外...

    基于java的开发源码-多线程反射泛型及正则表达式学习笔记和源码.zip

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而备受青睐。...通过阅读源码和笔记,不仅可以巩固理论知识,还能提升实际编程技能,为成为一名优秀的Java开发者打下坚实基础。

Global site tag (gtag.js) - Google Analytics