注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚楼听风雨

没有理想的人,永远也不能翱翔与蓝天白云之上~

 
 
 

日志

 
 

JAVA中正则表达式的简单应用  

2008-10-04 22:08:37|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关键词: JAVA    正则表达式                                          

//生成一个模式

Pattern p = Pattern.compile("a{1,3}b{1,3}");

//匹配一个母串

Matcher m = p.matcher("abdbdaabddfabbc");

//查找是否匹配,此操作是下列各操作的前提操作,若不进行查找,下列各操作均会出现异常。

Boolean  b = m.find());   ----true

int start = matcher.start();  //查找匹配串的起始字母的位置 --- 0

int end = matcher.end();   //查找匹配串的结束字母的位置 --- 2

Boolean  b = m.find());  //查找下一个匹配串  ---true

Boolean  b = m.matches()  //查找是否完全匹配  ----false

Boolean  b = m.lookingAt()  //查找是否从头匹配  ---true

//一个模式可以更换其匹配的母串:   m.reset();

可以利用“全部替换”功能将空白符替换为单一空格:

 String patternStr = "\\s+";

 String replaceStr = " ";

 Pattern pattern = Pattern.compile(patternStr);

 Matcher matcher = pattern.matcher(“a   b       c   d”);

 return matcher.replaceAll(replaceStr);

高级的替换,每次替换的内容不一样:

        Pattern p = Pattern.compile("a{1,3}b{1,3}");

        Matcher m = p.matcher("abdbdaabddfabbc");

        StringBuffer sb = new StringBuffer();

        boolean f = m.find();

        int i = 0;

        while(f){

            m.appendReplacement(sb, i+"");

            i++;

            f = m.find();

        }

            m.appendTail(sb);

        System.out.println(sb.toString());

分组匹配:

//一个复杂的正则表达式,可以根据括号来分成若干个组,你在进行匹配的时候,可以使用全部内容进行匹配,

//也可以使用其中的某一个组进行匹配。组的编号从0开始,0表示全部,1表示第一组,2表示第二组……

    CharSequence inputStr = "abbabcd";

    String patternStr = "(a(b*))+(c*)";

   

    // Compile and use regular expression

    Pattern pattern = Pattern.compile(patternStr);

    Matcher matcher = pattern.matcher(inputStr);

    boolean matchFound = matcher.find();

   

    if (matchFound) {

        // Get all groups for this match

        for (int i=0; i<=matcher.groupCount(); i++) {

            String groupStr = matcher.group(i);

        }

    }

//对于上述例子,共分3组分别是(a(b*))、(b*)、(c*)

//本来第一组应该匹配abb,但是它发现bb和第二组完全匹配,本着互不干涉的原则,

//第一组只能匹配a,这是分组匹配时一个需要注意的地方。

在求子串起始位置和结束位置时需要注意的地方:

matcher.find();

matcher.end();  //是按照整个模式进行匹配后,子串的结束位置

matcher.find();

matcher.grout(1);

matcher.end();  //是按照组1匹配后,子串的结束位置。

在文件输入流中进行匹配,不合要求的不读取:

        String filename = "infile.txt";

        String pattern = "pattern";

        BufferedReader rd = new BufferedReader(new FileReader(filename));

        rd = new BufferedReader(new RegexReader(rd, pattern));

   

        // Retrieve all lines that match pattern

        String line = null;

        while ((line = rd.readLine()) != null) {

            // line matches the pattern

  评论这张
 
阅读(112)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017