码迷,mamicode.com
首页 > 编程语言 > 详细

java正则表达式

时间:2015-09-18 00:34:09      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

  最近遇到用java正则表达式进行数据输入校验时就查了查java jdk的文档,可是文档中的有些关键词真是让人头大啊,这还不是关键的,最蛋疼的是文档中的解释简单的让人抓狂,于是各种搜索找资料,总算对有些概念有所理解

  java正则表达式工具主要由两个类组成,分别是java.util.regex.Pattern模式类和java.util.regex.Matcher匹配器类,至于这些类的用法可以参看jdk的文档,这里主要说一下其中的几个难以理解的关键词

  ①.greedy,reluctant,possessive(可对照jdk文档的greedy量词,reluctant量词,possessive量词)

  greedy是贪婪的,reluctant是勉强的,也可理解为non-greedy非贪婪的,possessive是独占的,占有的,这些关键词只在java正则表达式的量词表达时起作用。如{n,m},{n,m}?,{n,m}+分别表示贪婪的,非贪婪的,独占的匹配算法

  greedy算法:在整个正则表达式匹配成功的前提下,量词修饰的字符部分会尽可能多的匹配字符串,如果由于量词部分匹配过多导致整个正则表达式匹配不成功时,该算法会一步步的回退量词匹配的字符串部分,以让整个正则表达式匹配成功

  reluctant算法:在整个正则表达式匹配成功的前提下,量词修饰的字符部分会尽可能少的匹配字符串。

  possessive算法:跟greedy算法有些类似,只是该算法一旦匹配不成功是不会逐步回退的。该算法也是让量词修饰的正

则表达式部分尽可能多的匹配字符串,但该算法不管整个正则表达式是否成功,一旦量词后面的正则表达式部分不能匹配字符串,匹配就失败,并且也不会回退,而是立即结束匹配

eg.

 public class RegExp {

    public static void main(String[] args) {

        String str = "aaa4bbb6cc";
        String regExp = ".{3,10}\\d";
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println("match string:" + matcher.group() + "\tmatch start:" + matcher.start() + "\tmatch end:" + matcher.end());
        } else {
            System.out.println("not match");
        }
    }
}       

 

运行结果:match string:aaa4bbb6 match start:0 match end:8

然后将量词部分{3,10}改成reluctant量词如下

public class RegExp {

    public static void main(String[] args) {

        String str = "aaa4bbb6cc";
        String regExp = ".{3,10}?\\d";
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println("match string:" + matcher.group() + "\tmatch start:" + matcher.start() + "\tmatch end:" + matcher.end());
        } else {
            System.out.println("not match");
        }
    }
}       

  

 运行结果:match string:aaa4 match start:0 match end:4

 最后将匹配量词改为{3,10}+possessive量词如下

 1 public class RegExp {
 2 
 3     public static void main(String[] args) {
 4 
 5         String str = "aaa4bbb6cc";
 6         String regExp = ".{3,10}+\\d";
 7         Pattern pattern = Pattern.compile(regExp);
 8         Matcher matcher = pattern.matcher(str);
 9         if (matcher.find()) {
10             System.out.println("match string:" + matcher.group() + "\tmatch start:" + matcher.start() + "\tmatch end:" + matcher.end());
11         } else {
12             System.out.println("not match");
13         }
14     }
15 } 

运行结果:not match

运行结果分析和非捕获组明天继续。。。睡觉。。。

 

  

 

java正则表达式

标签:

原文地址:http://www.cnblogs.com/guanfeng/p/4817976.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!