`

正则表达式(续)

阅读更多

6.2.3 使用正则表达式(Regular Expression)

如果查询J2SE 1.4之后的String在线API手册说明,会发现有matches()replaceAll()等方法,所传入的自变量是正则表达式(Regular Expression)的字符串。正则表达式最早是由数学家Stephen Kleene1956年提出,主要使用在字符字符串的格式比对,后来在信息领域广为应用,现在已经成为ISO(国际标准组织)的标准之一。

JavaJ2SE 1.4之后开始支持正则表达式,您可以在API文件的java.util.regex.Pattern类中找到支持的正则表达式相关信息,可以将正则表达式应用于字符串的比对、取代、分离等动作上。以下将介绍几个简单的正则表达式。

对于一些简单的字符比对,例如19AZ等,您可以使用预先定义的符号来表示。表6-4列出了几个常用的字符比对符号。

6-4  字符比对符号

方  法

说  明

.

符合任一字符

\d

符合09任一个数字字符

\D

符合09以外的字符

\s

符合\t\n\x0B\f\r等空格符

\w

符合azAZ09等字符,也就是数字或是字母都符合

\W

符合azAZ09等之外的字符,也就是除数字与字母外都符合

举例来说,如果有一字符串abcdebcadxbc,若使用.bc来作比对,符合的子字符串有abcebcxbc 3个;如果使用..cd,则符合的子字符串只有abcd。范例6.9证实了这个说明。

Ü 范例6.9  RegularExpressionDemo.java                                                   

public class RegularExpressionDemo {

    public static void main(String[] args) {

        String text = "abcdebcadxbc";

 

        String[] tokens = text.split(".bc");

        for(String token : tokens) {

            System.out.print(token + " ");

        }

        System.out.println();

 

        tokens = text.split("..cd");

        for(String token : tokens) {

            System.out.print(token + " ");

        }

        System.out.println();

 

    }

}

执行结果:

 

d ad

ebcadxbc

使用.bc来作比对,由于符合的子字符串有abcebcxbc 3个,所以split()方法会使用这3个字符串为依据来作字符串分离,返回的自然就是不符合表达式.bcdad。同理如果表达式为..cd,则使用split()返回的就是不符合..cdebcadxbc

也可以使用字符类(Character Class)来比较一组字符范围。表6-5示范了几个字符类的设定方式。

6-5  字符类范例

范  例

作  用

[abc]

符合abc

[^abc]

符合abc之外的字符

[a-zA-Z]

符合az或者是AZ的字符

[a-d[m-p]]

ad或者是mp,也可以写成[a-dm-p]

[a-z&&[def]]

az并且是def,结果就是def可以符合

[a-z&&[^bc]]

az并且不是bc

[a-z&&[^m-p]]

az并且不是mp

 

指定一个字符之外,也可以加上“贪婪量词”(Greedy Quantifiers)来指定字符可能出现的次数。表6-6示范了几个例子。

6-6  贪婪量词范例

范  例

作  用

X?

X可出现一次或完全没有

X*

X可出现零次或多次

X+

X可出现一次或多次

X{n}

X可出现n

X{n,}

X可出现至少n

X{n, m}

X可出现至少n次,但不超过m

 

另外,还有Reluctant quantifiersPossessive quantifiers等的指定,可以自行参考java.util.regex.PatternAPI文件中的说明。

String类中,matches()方法可以让您验证字符串是否符合指定的正则表达式,这通常用于验证使用者输入的字符串数据是否正确,例如电话号码格式;replaceAll()方法可以将符合正则表达式的子字符串置换为指定的字符串;split()方法可以让您依指定的正则表达式,将符合的子字符串排除,剩下的子字符串分离出来并以字符串数组返回。范例6.9已经示范了split()方法的使用,接下来在范例6.10中示范replaceAll()matches()方法的运用。

Ü 范例6.10  UseRegularExpression.java                                                      

import java.io.*;

 

public class UseRegularExpression {

    public static void main(String args[])

                              throws IOException {

        BufferedReader reader =

            new BufferedReader(

                new InputStreamReader(System.in));

 

        System.out.println("abcdefgabcabc".replaceAll(".bc", "###"));

 

        String phoneEL = "[0-9]{4}-[0-9]{6}";

        String urlEL = "<a.+href*=*['\"]?.*?['\"]?.*?>";

        String emailEL = "^[_a-z0-9-]+(.[_a-z0-9-]+)*" +

                       "@[a-z0-9-]+([.][a-z0-9-]+)*$";

 

        System.out.print("输入手机号码: ");

        String input = reader.readLine();

 

        if(input.matches(phoneEL))

            System.out.println("格式正确");

        else

            System.out.println("格式错误");

 

        System.out.print("输入href标签: ");

        input = reader.readLine();

 

        // 验证href标签

        if(input.matches(urlEL))

            System.out.println("格式正确");

        else

            System.out.println("格式错误");

 

        System.out.print("输入电子邮件: ");

        input = reader.readLine();

 

        // 验证电子邮件格式

        if(input.matches(emailEL))

            System.out.println("格式正确");

        else

            System.out.println("格式错误");

    }

}

 

执行结果:

 

###defg######

输入手机号码: 0939-100391

格式正确

输入href标签: <a href="http://caterpillar.onlyfun.net">

格式正确

输入电子邮件: caterpillar.onlyfun@gmail.com

格式正确

 

良葛格的话匣子:

正则表达式的设计是一门学问,也有专门的书籍就是在介绍正则表达式的设计,没有经常使用的话,很难设计出实用性高的正则表达式,这里只能说大致介绍而已。如果真有需要某种正则表达式,建议可以使用搜索引擎查看有无现成或类似的表达式可以使用,要不然的话,就只有找专门的书籍研究研究如何设计了。

分享到:
评论

相关推荐

    精通正则表达式~~~

    精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...

    C#字符串和正则表达式《续》

    包含详细的字符串解析,正则表达式讲解,非常好理解,容易学习,初学者入门好资料,高手参考使用

    js正则表达式常用函数详解(续)

    正则表达式对象的方法 1、test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。如果存在则返回 true,否则就返回 false。 2、exec,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个...

    第4章 数据处理-php正则表达式-郑阿奇(续)

    1.正则表达式基础知识 含义:由普通字符和(a-z)和一些特殊字符组成的字符串模式 功能:有效性验证。 替换文本。 从一个字符串提取一个子字符串。 分类:POSIX和Perl POSIX风格更容易掌握,但不能用于二进制模式,而...

    DownLloader java Thread 断电下载 线程池 log4j 05

    程序暂涉及范围:多线程断点续载下载,断电下载日志恢复,正则表达式,线程池使用,对象序列化,log4j日志 YiDownLoader为下载程序入口 RegExpressionUtil为正则表达式入口 其余的自己看; 该程序还有其他的模块,...

    高性能WEB服务器(MyWebServer,支持ISAPI和FastCGI接口)

    支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录等,可通过ISAPI接口、FasctCGI接口实现执行服务器脚本(如PHP,asp,asp.net等),性能完全超越IIS等很多主流WEB服务器软件。  使用FasctCGI时,在...

    鸿言图片批量下载v2.1官方免费安装版

    支持同时下载多个网站图片,使用先进的多线程和正则表达式功能,能够十分快速地分析网页和获取图片。软件拥有网页登录功能,能够下载那些需要登录才能浏览的网站或论坛。对于需要使用代理才能浏览的网站,可以配置...

    程序员面试题刷题网站-100-Days-of-Code-May-2020:2020年5月100天代码

    工作,仍在学习自我之前的课程运行以来添加的新材料,包括开始学习正则表达式 (regex)。 第 6 天:JavaScript 正则表达式 05/06/2020 完全在 freeCodeCamp.org 上完成正则表达式(JavaScript)。 第 7 天:新项目...

    DownLloader java Thread 断电下载 线程池 log4j 03

    多线程断点续载下载,断电下载日志恢复,正则表达式,线程池使用,对象序列化,log4j日志

    MyWebServer(轻量级web服务器软件) v3.1.29 绿色免费版.zip

    支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录、HTTP反向代理等,可通过ISAPI接口、FastCGI接口实现执行服务器脚本(如PHP,asp,asp.net等),性能完全超越IIS等很多主流WEB服务器软件。...

    蚂蚁快传AntM3.1.0.13 使用手册

     支持后缀、文件名、正则表达式等多种发送文件过滤方式  支持平铺、复制、模板定义等多种远程文件组织方式  网络因逻辑错误、网络故障等原因中断后可自动重连传输  传输高效,传输效率远大于Serv-U、Vpfs等...

    Python实现可配置的sftp传输

    [src_rule] 原始文件名规则,为python正则表达式 如果要按文件名规则获取,此项需要配置 [dest_rule]目标文件名规则,一般可以不配置,不配置值应为NULL [wrok_space] 本地临时工作目录,get的时候此目录为目标目录...

    MyWebServer v3.6.22.zip

    软件功能强大,可以实现包HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录、HTTP反向代理等,可通过ISAPI接口、FastCGI接口实现执行服务器脚本等诸多功能。软件界面美观简洁、简单全面、实用方便,...

    MyWebServer_3.6.20虚拟服务器.zip

    MyWebServer是一个高...支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录等,可通过ISAPI接口、FastCGI接口实现执行服务器脚本(如PHP,asp,asp.net等),性能完全超越IIS等很多主流Web服务器软件。

    mywebserver

    支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录、HTTP反向代理、gzip压缩等功能,内置ASP有限支持,可通过ISAPI接口、FastCGI接口实现执行服务器脚本(如PHP,asp,asp.net等)。

    chrono下载管理器 chrome 插件

    Chrono资源嗅探器可以检测网页上的所有链接、图片、音频和视频,你还可以根据链接的文件类型或正则表达式来筛选你要下载的地址。 官方备注的chrono下载管理器的功能有: * 完全替换Chrome浏览器自带的下载管理界面...

    TCL编程初步

    9.3.5 其它支持正则表达式的命令.. 60 第 10 章. 名字空间. 62 10.1 创建名字空间62 10.2 用::限定符来使用变量和过程.62 10.3 名字空间的变量 63 10.4 过程的进口与出口64 10.5 内省(INTROSPECTION) 65 10.6...

Global site tag (gtag.js) - Google Analytics