<!--正文开始-->
本文将介绍如何在Java中使用正则表达式来处理文本数据。正则表达式就是一个字符串,但和普通的字符串不同的是,正则表达式是对一组相似字符串的抽象,如下面的几个字符串:
a98b c0912d c10b a12345678d ab
我们仔细分析上面五个字符串,可以看出它们有一个共同特征,就是第一个字符必须是'a'或'c',最后一个字符必须是'b'或'd',而中间的字符是任意多个数字组成(包括0个数字)。因此,我们可以将这五个字符串的共同特点抽象出来,这就产生了一个正则表达式:[ac]\\d*[bd].而根据这个正则表达式,我们可以写出无穷多个满足条件的字符串。
在Java中使用正则表达式的方法非常多,最简单的就是和字符串一起使用。在String中有四个方法可以使用正则表达式,它们是matches、split、replaceAll和replaceFirst.
一、matches方法
matches方法可以判断当前的字符串是否匹配给定的正则表达式。如果匹配,返回true,否则,返回false.matches方法的定义如下:
public boolean matches(String regex)
如上面给出的正则表达式我们可以用如下程序验证。
String[] ss = new String[]{"a98b", "c0912d", "c10b", "a12345678d", "ab"};
for(String s: ss)
System.out.println(s.matches("[ac]\\d*[bd]"));
输出结果:
true
true
true
true
true
下面简单解释一下这个正则表达式的含义。如果我们学过编译原理的词法分析,就会很容易理解上面的正则表达式(因为正则表达式的表示方法和词法分析中的表达式类似)。如在 [……]中的相当于或"|",如[abcd]相当于a|b|c|d,也就是a或b或c或d.如上面的正则表达式的开头部分是[ac],就代表着字符串的开头只能是a或c.[bd]表达字符串结尾只能是b或d.而中间的\d表达0-9的数字,由于\在正则表达式中有特殊含义,所以用\\来表示\.而*表示有0或无穷多个(这在词法分析中叫*闭包),由于*跟在\d后面,因此表达有0或无穷多个数字。
二、split方法
split方法使用正则表达式来分割字符串,并以String数组的形式返回分割结果。split有两种重载形式,它们定义如下:
public String[] split(String regex)
public String[] split(String regex, int limit)
如下面的代码将使用split的第一种重载形式来分割HTTP请求头的第一行,代码如下:
String s = "GET /index.html HTTP/1.1";
String ss[] = s.split(" +");
for(String str: ss)
System.out.println(str);
输出结果:
GET
/index.html
HTTP/1.1
在使用split的第一种重载形式时应注意,如果分割后的字符串最后有空串,将被忽略。如使用正则表达式\d来分割字符串a0b1c3456时,得到的数组的长度为3,而不是7.在split的第二种重载形式中有一个limit参数,要分三种情况讨论:
1. 大于0: 如limit的值为n,那么将对正则表达式使用n-1次,下面的代码:
String s = "a0b1c3456";
String ss[] = s.split("\\d", 3);
for(String str: ss)
System.out.println(str);
输出结果:
a
b
c3456
从输出结果可以看出,程序只对" a0b1c3456"使用了两次正则表达式,也就是在少扫描完字符'1'后,不管后面有没有满足条件的字符串,都将后面的字符串作为一个整体来作为返回数组的最后一个值。
2. 小于0: 不忽略结尾的空串。也就是上面的例子返回数组的长度应该是7,而不是3. 3. 等于0:这是默认值,相当于split的第一种重载形式。
三、replaceAll 和 replaceFirst方法
为两个方法的定义如下:
public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)
这两个方法用replacement替换当前字符串中和regex匹配的字符串。使用方法很简单,这里不再详述,感兴趣的读者可以参考相关的文档。
对于Java中正则表达式的详细内容,请参考JDK文档。
相关推荐
本课件旨在为初学者提供一个Java正则表达式的入门指南。 在Java中,正则表达式是通过`java.util.regex`包中的类来支持的,主要包括`Pattern`、`Matcher`和`PatternSyntaxException`。`Pattern`类用于编译正则表达式...
《正则表达式经典实例》是一本非常实用的指南,不仅为读者提供了丰富的知识和技巧,还通过具体的实例帮助读者解决了实际工作中可能遇到的问题。无论你是初学者还是专业人士,都能从中受益匪浅。正则表达式的强大功能...
可能会以常见的问题为切入点,如邮箱验证、电话号码格式检查等,让初学者快速掌握正则表达式的实用性。 学习正则表达式,首先要理解它的基本元素和结构,然后通过大量的实践来熟悉各种模式的组合。例如,可以学习...
本书旨在帮助读者全面掌握正则表达式的应用技巧,无论是初学者还是有经验的开发者,都能从中获得深入的见解和实用的操作指南。 ### 正则表达式基础知识 正则表达式是一种强大的文本匹配工具,用于在字符串中查找、...
《精通正则表达式》是正则表达式学习者的一本权威指南,英文原版保持了最原始的技术精髓。正则表达式作为一种强大的文本处理工具,广泛应用于编程、数据分析、文本挖掘等多个领域。这本书的第三版,发布于2006年8月...
通过阅读《精通正则表达式》(第三版),无论是初学者还是经验丰富的开发者,都能系统地提升对正则表达式的理解和应用能力,从而在实际工作中更加游刃有余。书中的实例和练习题有助于巩固理论知识,并将所学转化为...
总而言之,《精通正则表达式》(第三版)是一本全面而深入的教程,无论你是初学者还是经验丰富的开发者,都能从中受益。它提供的不仅仅是技术知识,更是一种解决问题的新视角和工具,对于任何需要处理文本数据的人来...
《正则表达式口袋参考书》是一本专为开发人员和...通过阅读《正则表达式口袋参考书》,无论是初学者还是经验丰富的开发者,都能加深对正则表达式的理解,提升在文本处理方面的技能,从而更高效地完成开发和管理任务。
《精通正则表达式》(第3版)(影印版)是一本专注于正则表达式的权威指南,尤其适合那些想要深入理解和掌握这一技术的IT从业者。正则表达式是编程语言中的一个重要工具,用于模式匹配和文本处理,广泛应用于Perl、...
总之,正则表达式是处理文本数据不可或缺的工具,无论你是初学者还是经验丰富的开发者,这个“正则表达式资料大全压缩包”都可能为你提供宝贵的资源和启示。如果你在使用过程中遇到任何问题,可以随时寻求帮助,如...
《精通正则表达式》(第三版)是一本值得每位程序员拥有的书籍,无论你是正则表达式的初学者还是希望进一步提升技能的资深开发者,都能从中受益匪浅。通过本书的学习,你将能够更加熟练地使用正则表达式进行文本处理,...
正则表达式是一种强大的文本处理工具,广泛应用于...无论你是初学者还是经验丰富的开发者,都能从中受益,提升你在正则表达式方面的技能。记得尊重知识产权,如果需要商业使用,务必购买正版,以支持作者的辛勤工作。
"正则表达式傻瓜式宝典"作为一本面向初学者的指南,应该以浅显易懂的方式,通过丰富的示例和练习,帮助读者逐步掌握这个强大工具的使用。无论是对编程感兴趣的学生,还是在职的开发者,都能从中受益。而PDF版本的...
1. **《正则表达式必知必会》**:这本书通常被视为初学者入门的首选,它详细介绍了正则表达式的基础知识,包括基本的元字符(如.、*、+、?、^、$等),字符类,量词,分组,反向引用,以及如何使用这些概念来构建...
该手册不仅为正则表达式的初学者提供了入门指导,也为有经验的用户提供了详细的参考。通过理解这些基本的元字符和构造,用户可以构建复杂的正则表达式来进行文本处理和数据提取任务。此外,了解不同的匹配模式(如...
对于初学者来说,掌握正则表达式的一些基础概念和模式是非常重要的。 首先,正则表达式允许我们定义一套规则来匹配特定的文本模式,这在处理字符串时尤其有用。例如,在一个文本编辑器中,如果我们想要查找所有的...
总之,这本书是学习和提升正则表达式技能的宝贵资源,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过深入阅读和实践书中的内容,你将能够更好地驾驭这个强大的文本处理工具,提高你的编程效率和代码...
Friedl的经典之作,被誉为正则表达式的权威指南。本书的最新版针对多种编程语言,包括PHP、Web、Java、Python和Node.js等广泛使用的开发环境,提供了深入浅出的正则表达式知识。无论你是初学者还是经验丰富的开发者...