有关正则表达式(针对java)

        在这次做实验的时候涉及MIT的一个实验Tweet Tweet用到了正则表达式,就看了下书,发现正则表达式真是一个强大的工具。正则表达式在很久之前就已经整合到标准Unix工具库,及程序设计语言中。在java中字符串的主要操作还是集中于String,StringBuffer,StringTokenizer中。而正则表达式则提供更加复杂强大的操作。使用正则表达式我们能对输入字符串进行搜索,一旦找到匹配部分我们就能对其进行各种各样的操作。

所谓正则表达式就是以某种方式来描述字符串。

例如,要找一个数字,在它前面有一个负号,那么我们可以表示为  -?

当然,正则表达式的强大还不限于此。我们假设现在情况更为复杂,要找到以若干负号或正号开头,后接数字的字符序列,此时我们可以得到的正则表达式应为(-|\\+)?\\d+    这里|可以表示或的意思,+就如之前提到的表示之前的字符的若干重复。可以注意到这里有\\符号,对于某些在正则表达式中有特殊意义的字符需要在表示时在前面先加上\\作为转义符。

接下来进入正题,如何创建正则表达式。为此准备一些基础:正则表达式常用的一些元素

首先是字符

B 指定字符     \uhhhh 十六进制0xhhhh     \t 制表符     \n 换行    \r 回车    \f 换页    \e转义

字符类

[abc] 包含abc的任意字符   [^abc] 除abc的任意字符   [a-zA-Z] 英文字母   [abc[hij]] a|b|c|h|i|j   [a-z&&hij] h|i|j表示交   [\s] 空白字符   [\S] 非空白字符   [\d] 数字   [\D] 非数字   [\w] [0-9a-zA-Z]   [\W] 同上表示非

逻辑操作符 

XY Y在X后   X|Y 或    (X)捕获组可用.graph方法输出某组  

边界匹配符

^ 表示字符串起始   $ 表结束  

//如果想要在不编代码的情况下简单的尝试可以使用正则表达式在线测试工具

现在开始在编程过程中使用

先加入java.util.regex包

用 static Pattern.compile()方法来编译你的正则表达式,它会根据你的String类型的正则表达式生成一个Pattern对象。之后将你想要检索的字符串传入Pattern类的matcher()方法。这个方法会生成一个Matcher对象,这个类封了很多很方便的方法。

例:

Pattern p=Pattern.compile("(^|[^A-Z0-9a-z]+)@([A-Z0-9a-z]+)");
Matcher m=p.matcher("zhengze@biaodashi @zhengze.biaodashi");

上例中表示的字符序列是匹配在@前是非字母、数字或空,在@后是字母、数字的字符序列。

常用的Matcher类的方法:

bollean matches()  判断输入的字符串是否匹配正则表达式模式

bollean lookingAt()  判断字符串的初始部分(不必整个字符串)是否能够匹配模式

boolean find()  在字符串中查找多个匹配的项目

boolean find(int start)  与上一个相同不过可以设置初始的查询位置

在上例中还存在括号,在逻辑操作符处我们提到过这是组的概念。Matcher对象提供了一系列方法来获取组相关的信息。

int groupCount()  返回模式中的组数目

String group()  返回前一次操作的第0组(整个匹配)

String group(int i)   返回前一次匹配操作的指定组号

int start(int group)返回前一次操作的找到的组起始索引

int end(int group)  返回前一次操作的找到的组最后一个字符加一的值

除了查找返回模式匹配成功的字符串,正则表达式还可以原串进行替换操作这一点提供了极大的便利。

replaceFirst(String replacement)  替换第一个匹配成功的部分为replacement

replaceAll(String replacement)  替换所有匹配成功的部分为replacement

appendReplacement(StringBuffer sbuf,String replacement)  执行一个渐行式替换,可以调用其他方法生成处理replacement,前两个只能替换固定字符串

appendTail(StringBuffer sbuf)  在执行若干次appendReplacement后可以使用此方法将字符串剩下部分复制到sbuf中


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值