正则表达式

http://manual.phpv.net/regular_expression.html(不错的介绍)
强大的字符串处理工具(查找,提取,分隔,替换),
创建正则表达式:
1、方括号表达式
[abc]枚举 [a-f]范围 [^abc]求否 [a-z&&[def]]与 [a-d[m-p]]并
2、圆括号表达式
将多个表达式组成一个表达式。可以用或运算符”|”连接
3、支持的数量标志符模式
Greedy:默认。一直匹配,直至无法进行
Reluctant(勉强模式):用“?”表示,只匹配最少的字符,最小匹配模式
Possessive:“+”表示,很少用到
eg:
String str=”hello//(此处空格)//, java!”;
//贪婪模式
System.out.println(str.repalceFirst(“\w*”,”foo”));//输出foo , java
//勉强模式
System.out.println(str.repalceFirst(“\w*?”,”foo”));//foo hello , java

使用正则表达式:
正则表达式字符串必须被先编译成Pattern对象,之后利用该Pattern对象创建Matcher对象。多个Matcher可共享一个Pattern。执行匹配的结果(true 或 false)保留在 Matcher 对象中。
典型的调用顺序:

Pattern p=Pattern.compile("a*b");
Matcher m=p.matcher("aaaaab");
boolen b=m.matches();//返回ture
若是一次性使用,则可
boolean b=Pattern.matches("a*b","aaaaab");

常用方法:
find():返回目标字符串中是否包含与 Pattern 匹配的子串。
group():返回上一次与 Pattern 匹配的子串。
start():返回上一次与 Pattern 匹配的子串在目标字符串中的开始位置。
end():返回上一次与 Pattern 匹配的子串在目标字符串中的结束位置+1。
lookingAt():返回目标字符串前面部分与 Pattern 是否匹配。
matches():返回整个目标字符串与 Pattern 是否匹配。
reset():将现有的 Matcher 对象应用于一个新的字符序列。
replaceAll()、replaceFirst()、split() 等方法,以利用正则表达式功能实现对字符串的替换和分割。

Pattern、Matcher 类的 CharSequence 接口代表一个字符序列,其中 CharBuffer、String、StringBuffer、StringBuilder 都是它的实现类。简言之,CharSequence 代表一个各种表示形式的字符串。
eg:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
Public class FindGroup
{
   public static void main(String[] args)
   {
    Matcher m=Pattern.compile("\\w+").matcher("JAVA is very easy!");
      while(m.find())
      {
      System.out.println(m.group());
       }
       int i=0;
       while(m.find(i))
       {
    System.out.print(m.group()+"\t");
        i++;
        }

   }

}

贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权

(如何让其只匹配到ab?“最先开始“,那么后续从左往右的表达式就没有懒惰/贪婪的级别高了吧?)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值