Java核心技术 正则表达式补充

1.Qulifiers​
Greedy quantifiers   X? X* X+ X{n} X{n,} X{n,m}​
Reluctant  quantifiers  X??  后多跟一个问号​
Possessive quantifiers  X?+   后多跟一个加号​

 

public class Test {
    public static void main(String args[]) {
        Pattern p = Pattern.compile(".{3,10}[0-9]");
        String s = "aaaa5b65bbb6a1";
        Matcher m = p.matcher(s);
        if (m.find()) {
            p(m.start() + "-" + m.end());
        } else {
            p("not match!");
        }
    }
}


结果是:0-10   此种方式是先吞入最多的字符既是10个字符,发现后面没有跟数字,然后释放以为,检测符合正则表达式​
在{3,10}后加问号,结果是:0-5,此种方法是先读入最少的3个字符,检测不符合在吞入一个字符,符号所以结果是0-5​
在{3,10}后加+,结果是not match,这种方式是直接吞入10个字符并且不吐出,所以不匹配​
2.non-capturing​
不捕获字符串​
(?X) (?:X) (?idmsuxU-idmsuxU) (?idmsux-idmsux:X) (?=X) (?!X) (?<=X) (?X)​

 

public class Test {
    public static void main(String args[]) {
        Pattern p = Pattern.compile(".{3}(?=a)");
        String s = "444a66b";
        Matcher m = p.matcher(s);
        while(m.find()) {
            p(m.group());
        }
    }
}

结果:444,.{3}(?=a)表示,有3个字符以a结尾,打印该3个字符,不包括a,(?=a).{3}时,结果为a66​​(放前面包括)
.{3}(?!a),结果是44a  66b    (?!a).{3}结果是444  66b​
.{3}(?<!a),结果是444  a66(从后往前数不是a的)   .{3}(?<=a),结果是44a,反向等同于(?=a).{3}
3.back refenrences向前引用​​

 

public class Test {
    public static void main(String args[]) {
        Pattern p = Pattern.compile("(\\d(\\d))\\2");
        String s = "122";
        Matcher m = p.matcher(s);
        p(m.matches());
    }
}

结果:true​
表示第3个数是不是和第二组的数匹配,(\\d\\d)\\1,1212结果是true,\\1表示第一个组组过之后的字符串和第一组比较​
4.flags的简写​​

 

public class Test {
    public static void main(String args[]) {
        Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        p("Java".matches("(?i)(java)"));
    }
}

结果:true​​
(?!)=Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);​
(?i)表示开启忽略大小写,而(?-i)表示关闭忽略大小写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值