正则表达式

3.import java.util.Arrays;   
4.import java.util.regex.Pattern;   
5.  
6./**  
7. * java.util.regex包负责对字符序列进行正则表达式匹配  
8. * Pattern负责编译  
9. * Matcher负责匹配  
10. * ---------------  
11. * 正则表达式:  
12. *1、元字符 好比char,紧紧代表一个字符;  
13. *2、某些字符,比如\、.、*等这样的字符在正则表达式中已经被作为标记使用了,如果你想作为非元字符使用的话就得进行转义,转义的方法是在这些字符前面加\,  
14. * 比如\就变成\\,.就成为\.  
15. *3、重复的元字符有:*,+,?,{n},{n,},{n,m},这个标记是用来修饰它前面的那个字符的。  
16. *4、字符类,或称为分组[],比如[0-9],[0-9A-Za-z]用-表示范围  
17. */  
18.public class PatternDemo1 {   
19.    public static void main(String[] args) {   
20.        /**1、元字符的[]*/  
21.        //[]属于元字符系列,所谓元字符简单的说就是字符,就是一个char,像bc就不是一个char了   
22.//      method2(new String[]{"abt","act","adt","abct","bt"}, "a[bcd]t");   
23.        //[]的区间,-的两头代表区间,多区间这样写,比如[0-9a-zA-Z]   
24.//      method2(new String[]{"a1t","a3t","a01t","abt","2t"}, "a[0-9]t");   
25.        //补集用^表示,在二元运算符中这是非的意思,尽管用了^,at还是不能通过,所以元字符[]必须有且仅有一个字符   
26.//      method2(new String[]{"a0t","a2t","abt","at"}, "a[^0246]t");   
27.           
28.        /**2、元字符的? + * */  
29.        //?的目标是它前面的一个字符,元字符?表示它前面的一个字符出现0次或1次   
30.//      method2(new String[]{"","a","aa","at","a1t"}, "a?");   
31.        //元字符+的目标是它前面的一个字符,它表示它前面的那个字符出现1次或多次   
32.//      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a+");   
33.        //元字符*的目标是它前面的一个字符,它表示它前面那个字符出现0次或多次,*可以说是?和+的并集   
34.//      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a*");   
35.           
36.        /** .元字符能匹配任何字符(换行\r除外),所以用.*可以匹配换行外的任何字符串  */  
37.//      method2(new String[]{"","a","aa","aaaaa","at","a1t","\t","\r","n"}, ".");   
38.//      method2(new String[]{"","a","aa","aaaaa","at","a1t","\t","\r","n"}, ".*");   
39.           
40.        /** 数量{n},{n,},{n,m}*/  
41.        //{n}表示它前面的字符重复n次,并且只重复n次,重复n-1次或n+1次都是不可以的   
42.//      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a{2}");   
43.        //{n,}是对{n}的扩展,表示重复n次(包含n次)以上   
44.//      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a{2,}");   
45.        //{n,m}表示数目在n到m范围内,包含两头   
46.//      method2(new String[]{"","a","aa","aaa","aaaa","aaaaa","at"}, "a{2,4}");   
47.//      method2(new String[]{"12345-1234","12345"}, "\\d{5}-\\d{4}|\\d{5}");   
48.        //   
49.//      method2(new String[]{"12345-123","12345"}, "\\d{5}|\\d{5}-\\d{4}");   
50.//      method2(new String[]{"211","12345"}, "2[0-4]\\d");   
51.//      method2(new String[]{"1","12345"}, "[01]?\\d\\d?");   
52.        method2(new String[]{"1","12345","12"}, "[0-9]");   
53.           
54.    }   
55.    private static void method2(String[] a,String regex){   
56.        Pattern p = Pattern.compile(regex);   
57.        for (int i = 0; i < a.length; i++) {   
58.            System.out.println(a[i]+","+p.matcher(a[i]).matches());   
59.        }   
60.    }   
61.    private static void method1(){   
62.        String str = "2011-11-12";   
63.        String pat = "\\d{4}-\\d{2}-\\d{2}";   
64.        System.out.println(Pattern.compile(pat).matcher(str).matches());   
65.           
66.        String str1 = "a1b22c333d4444e55555f";   
67.        //按数字来分割   
68.        String[] str1Arr = Pattern.compile("\\d+").split(str1);   
69.        System.out.println(Arrays.toString(str1Arr));   
70.        //数字全部替换成_   
71.        System.out.println(Pattern.compile("\\d+").matcher(str1).replaceAll("_"));   
72.        //去除所有的空格   
73.        System.out.println("\\s去除所有的空格:"+Pattern.compile("\\s").matcher("aa b c d ").replaceAll(""));   
74.        System.out.println("5-10个字符:"+Pattern.compile(".{5,10}").matcher("12345").matches());   
75.        System.out.println("多匹配:"+Pattern.compile("\\bhi.*Lucy\\b").matcher("hi后面不远处跟着一个Lucy").matches());   
76.        System.out.println("多匹配2:"+Pattern.compile("^\\d{5,12}$").matcher("12345678a").matches());   
77.           
78.        //直接调用String类提供的方法更加的方便   
79.        System.out.println(Arrays.toString(str1.split("\\d+")));   
80.        System.out.println("2011-11-12".matches("\\d{4}-\\d{2}-\\d{2}"));   
81.    }   
82.}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值