软件构造之java正则表达式的使用

java正则表达式应用

概述

正则表达式是一种可以用于模式匹配和替换的强有力的工具,一个正则表达式就是由普通的字符(例如字符a到7)以及特殊字符(称为元字符)组成的文字模式,它描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式在字符数据处理中起着非常重要的作用,我们可以用正则表达式完成大部分的数据分析处理工作,如:判断一个串是否是数字、是否是有效的Email地址,从海量的文字资料中提取有价值的数据等等,如果不使用正则表达式,那么实现的程序可能会很长,并且容易出错。对这点本人深有体会,面对大量工具书电了档资料的整理工作,如果不懂得应用正则表达式来处理,那么将是很痛苦的一件事情,反之则将可以轻松地完成,获得事半功倍的效果。
在JDKI.3或之前的JDK版本中并没有包含正则表达式库可供JAVA程序员使用,之前我们一般都在使用第三方提供的正则表达式库,这些第三方库中有源代码开放的,也有需付费购买的,而现时在JDKI 4 的测试版中也己经包含有正则表达式库一java.util.regex。
它包括两个类:Pattern和Matcher:
Pattern 一个Pattern是一个正则表达式经编译后的表现模式。
Matcher 一个Matcher对象是一个状态机器,它依据pattern对象做为匹配模式对字符串展丌匹配检查。
正则表达式符号编译规则
正则表达式使用教程、类图

使用方法实例


import java.util.regex.*;

class RegexExample1{
   public static void main(String args[]){
      String content = "I am noob " +
        "from runoob.com.";

      String pattern = ".*runoob.*";

      boolean isMatch = Pattern.matches(pattern, content);
      System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
   }
}

特殊字符的引用方法

在其他语言中,\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \d,而表示一个普通的反斜杠是 \\。

常用的方法

刚开始学习正则表达式的时候,由于对macher的方法了解不到位,出现了很多使用不合适的地方,比如只会使用find然后group两种方法,这样就会很不方便,变成笨拙且有些功能无法实现。
下面附上正确使用这两种方法的方式,要记住,一开始就逼着自己用最好的方法是很难得,有的时候笨拙的犯错恰好是你学习成长最好的教材。
索引方法

索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配:
序号 方法及说明
1 public int start()
返回以前匹配的初始索引。
2 public int start(int group)
返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引
3 public int end()
返回最后匹配字符之后的偏移量。
4 public int end(int group)
返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。

还有group(0)和其他下标的含义,对于正则表达式的使用都有不小的提升作用。
正则表达式想学好没有捷径,只有靠多练。我是在学完学校开的形式语言与自动机之后才真正掌握了正则表达式的技巧和原理的,希望读者加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值