首页 > 编程语言 > 详细

JAVA笔记28-正则表达式(补充、不重要)

时间:2014-04-27 09:58:44      阅读:529      评论:0      收藏:0      [点我收藏+]

一、Greedy(贪婪的)尽可能多的匹配,Reluctant(不情愿的)尽可能少的匹配。Possessive(独占的)不常用。

 

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
 
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
 
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次

例如:

bubuko.com,布布扣
import java.util.regex.*;
public class Test{
    public static void main(String args[]){
        //Pattern p = Pattern.compile("(.{3,10})[0-9]");//输出0 9
        //Pattern p = Pattern.compile("(.{3,10}?)[0-9]");//输出0 5
        Pattern p = Pattern.compile("(.{3,10}+)[0-9]");//输出not match!
        String s = "aaaa5bbb6";
        Matcher m = p.matcher(s);
        if(m.find()){
            System.out.println(m.start()+" "+m.end());
        }
        else{
            System.out.println("not match!");
        }
    }
}
bubuko.com,布布扣

 

 

 

二、除了?=,其他一般不用

Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
等价于:Pattern p = Pattern.compile("(?i)java");

特殊构造(非捕获)
(?:X) X,作为非捕获组
(?idmsux-idmsux)  Nothing,但是将匹配标志i d m s u x on - off
(?idmsux-idmsux:X)   X,作为带有给定标志 i d m s u x on - off
(?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
(?>X) X,作为独立的非捕获组
bubuko.com,布布扣
import java.util.regex.*;
public class Test{
    public static void main(String args[]){
        Pattern p = Pattern.compile(".{3}");//输出444 a66
        //Pattern p = Pattern.compile(".{3}(?=a)");//输出444
        //Pattern p = Pattern.compile("(?=a).{3}");//输出a66
        //Pattern p = Pattern.compile(".{3}(?!a)");//输出44a 66b
        //Pattern p = Pattern.compile("(?!a).{3}");//输出444 66b
        //Pattern p = Pattern.compile(".{3}(?<!a)");//输出444 a66
        //Pattern p = Pattern.compile(".{3}(?<=a)");//输出44a
        String s = "444a66b";
        Matcher m = p.matcher(s);
        while(m.find()){
            System.out.println(m.group());
        }
    }
}
bubuko.com,布布扣

 

三、

Back 引用
\n 任何匹配的 nth 捕获组
bubuko.com,布布扣
import java.util.regex.*;
public class Test{
    public static void main(String args[]){
        Pattern p = Pattern.compile("(\\d\\d)\\1");//与group(1)相同
        String s = "1212";
        Matcher m = p.matcher(s);
        System.out.println(m.matches());//true
        
        p = Pattern.compile("(\\d(\\d))\\2");//与group(2)相同
        s = "12";
        m = p.matcher(s);
        System.out.println(m.matches());//false

        p = Pattern.compile("(\\d(\\d))\\2");//与group(2)相同
        s = "122";
        m = p.matcher(s);
        System.out.println(m.matches());//true
    }
}
bubuko.com,布布扣

 

JAVA笔记28-正则表达式(补充、不重要),布布扣,bubuko.com

JAVA笔记28-正则表达式(补充、不重要)

原文:http://www.cnblogs.com/seven7seven/p/3692496.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!