6.2.3 使用正则表达式(Regular Expression)
如果查询J2SE 1.4之后的String在线API手册说明,会发现有matches()、replaceAll()等方法,所传入的自变量是正则表达式(Regular Expression)的字符串。正则表达式最早是由数学家Stephen Kleene于1956年提出,主要使用在字符字符串的格式比对,后来在信息领域广为应用,现在已经成为ISO(国际标准组织)的标准之一。
Java在J2SE 1.4之后开始支持正则表达式,您可以在API文件的java.util.regex.Pattern类中找到支持的正则表达式相关信息,可以将正则表达式应用于字符串的比对、取代、分离等动作上。以下将介绍几个简单的正则表达式。
对于一些简单的字符比对,例如1~9、A~Z等,您可以使用预先定义的符号来表示。表6-4列出了几个常用的字符比对符号。
表6-4 字符比对符号
方 法
|
说 明
|
.
|
符合任一字符
|
\d
|
符合0~9任一个数字字符
|
\D
|
符合0~9以外的字符
|
\s
|
符合\t、\n、\x0B、\f、\r等空格符
|
\w
|
符合a~z、A~Z、0~9等字符,也就是数字或是字母都符合
|
\W
|
符合a~z、A~Z、0~9等之外的字符,也就是除数字与字母外都符合
|
举例来说,如果有一字符串abcdebcadxbc,若使用.bc来作比对,符合的子字符串有abc、ebc、xbc 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();
}
执行结果:
使用.bc来作比对,由于符合的子字符串有abc、ebc、xbc 3个,所以split()方法会使用这3个字符串为依据来作字符串分离,返回的自然就是不符合表达式.bc的d与ad。同理如果表达式为..cd,则使用split()返回的就是不符合..cd的ebcadxbc。
也可以使用字符类(Character Class)来比较一组字符范围。表6-5示范了几个字符类的设定方式。
表6-5 字符类范例
范 例
|
作 用
|
[abc]
|
符合a、b或c
|
[^abc]
|
符合a或b或c之外的字符
|
[a-zA-Z]
|
符合a~z或者是A~Z的字符
|
[a-d[m-p]]
|
a~d或者是m~p,也可以写成[a-dm-p]
|
[a-z&&[def]]
|
a~z并且是d或e或f,结果就是d或e或f可以符合
|
[a-z&&[^bc]]
|
a~z并且不是b或c
|
[a-z&&[^m-p]]
|
a~z并且不是m~p
|
指定一个字符之外,也可以加上“贪婪量词”(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 quantifiers、Possessive quantifiers等的指定,可以自行参考java.util.regex.Pattern类API文件中的说明。
在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 对于...
正则表达式是一种文本处理的重要工具,它允许用户通过定义一套规则来搜索或匹配特定的字符串模式。PHP作为一门广泛使用的脚本语言,内置了强大的正则表达式功能,能够帮助开发者更有效地处理数据和执行文本操作。 ...
在IT领域,尤其是在编程语言的学习中,理解和掌握字符串与正则表达式是非常关键的技能。本文将深入探讨C#中的字符串处理以及正则表达式的应用,帮助初学者入门,并为经验丰富的开发者提供参考资料。 字符串是编程中...
通过在`onkeyup`事件中使用该正则表达式,可以确保用户每次按键后只保留英文字母。 #### 2. 仅允许输入数字 ```html (/[^\d]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text')...
正则表达式是一种强大的文本处理工具,用于在字符串中匹配特定模式。它是“Regular Expression”的缩写,简称“regex”或“regexp”。在编程语言中,正则表达式被广泛用于搜索、替换、验证字符串等任务,对于数据...
JAVA常用的正则表达式是处理字符串模式匹配的强大工具,在各种应用场合中发挥着关键作用。以下是对给定文件中提到的正则表达式的详细解析: ### 1. 简单重复模式 ``` a*b ``` 这个表达式表示匹配任意数量(包括零个...
正则表达式对象的方法 1、test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。如果存在则返回 true,否则就返回 false。 2、exec,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个...
Python 字符串与正则表达式知识点总结 Python 字符串是 Python 编程语言中最基本的数据类型之一, Plays 一个重要的角色。字符串是用来表示文本信息的,可以是英文、中文、数字、符号等。在 Python 中,字符串可以...
正则表达式与有穷自动机之间存在等价关系,即任何正则表达式都能构建出一个等价的有穷自动机来识别其描述的语言,反之亦然。这一等价性是词法分析理论的基础,因为它们可以相互转换,从而在设计词法分析器时提供灵活...
这款软件的特色在于它支持正则表达式(正则匹配),这意味着你可以自定义规则来筛选和捕获符合特定模式的图片链接,从而实现更精确和灵活的下载需求。 在网页上,图片通常作为网站内容的重要组成部分,可能是产品...
这不仅涵盖了基础的自动化测试操作,还涉及到了高级特性如正则表达式的应用,对于理解UFT的测试流程和提升测试效率具有重要作用。通过这样的实践,测试人员可以更好地进行功能测试,确保软件的质量和稳定性。
程序暂涉及范围:多线程断点续载下载,断电下载日志恢复,正则表达式,线程池使用,对象序列化,log4j日志 YiDownLoader为下载程序入口 RegExpressionUtil为正则表达式入口 其余的自己看; 该程序还有其他的模块,...
本篇文章将详细探讨如何在Android应用中实现自动更新机制,尤其是通过正则表达式处理从服务器获取的数据。 首先,我们要理解Android应用自动更新的基本流程。这通常包括以下几个步骤: 1. **检测更新**:应用启动...
支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录等,可通过ISAPI接口、FasctCGI接口实现执行服务器脚本(如PHP,asp,asp.net等),性能完全超越IIS等很多主流WEB服务器软件。 使用FasctCGI时,在...
支持同时下载多个网站图片,使用先进的多线程和正则表达式功能,能够十分快速地分析网页和获取图片。软件拥有网页登录功能,能够下载那些需要登录才能浏览的网站或论坛。对于需要使用代理才能浏览的网站,可以配置...
工作,仍在学习自我之前的课程运行以来添加的新材料,包括开始学习正则表达式 (regex)。 第 6 天:JavaScript 正则表达式 05/06/2020 完全在 freeCodeCamp.org 上完成正则表达式(JavaScript)。 第 7 天:新项目...
正则表达式(Regular Expression)是Python中进行字符串匹配和提取的强大工具,它可以用来识别和提取符合特定模式的字符串,如图片链接。 首先,我们需要了解Python中的几个关键库,它们在爬虫开发中扮演着重要角色...
分页文字采集过滤规则是内容采集过程中不可或缺的一环,它涉及到正则表达式和dedeCMS系统的特定标签。 首先,文章提到了在进行分页内容匹配之后,接下来的任务就是“过滤”。过滤分为分页区域过滤和文章内容过滤。...