正则表达式中的内个陷阱

第一个需要注意的地方是:

p("abc888^&*".matches("[a-z]{1,3}\\d+[%^&*]+"));

在后面匹配的地方,小尖号^不能放在【】中括号的前面,不然就会匹配不成功

p("abc888^&*".matches("[a-z]{1,3}\\d+[^%&*]+"));

上面这段代码将会输出匹配不成功,因为[^%&*]匹配的是除了(%&*)这几个符号之外的字符。

陷阱二:

反斜线

p("\\".matches("\\\\"));

在Java中两个反斜线代表的是一个反斜线

第三

String str1 = "123-23456-1234-6777-12";
        Pattern p1 = Pattern.compile("\\d{3,5}");    //创建一个正则表达式的编译器
        Matcher m1 = p1.matcher(str1);                //创建一个正则表达式的匹配器,匹配器的作用是将字符序列加载到编译器中与正则表达式进行匹配
        p(m1.matches());
        m1.reset();    //重置匹配器
        p(m1.find());//查找与该模式匹配的输入序列的下一个子序列
        p(m1.find());
        p(m1.find());
        p(m1.find());
        p(m1.find());

 4.


String str1 = "123-23456-1234-6777-12";
Pattern p1 = Pattern.compile("\\d{3,5}"); //创建一个正则表达式的编译器
Matcher m1 = p1.matcher(str1); //创建一个正则表达式的匹配器,匹配器的作用是将字符序列加载到编译器中与正则表达式进行匹配

 p(m1.matches());
        m1.reset();    //重置匹配器
        p(m1.find());//查找与该模式匹配的输入序列的下一个子序列
        p(m1.start()+"-"+m1.end());    //找到匹配字符串的起始和结束位置
        p(m1.find());
        p(m1.start()+"-"+m1.end());
        p(m1.find());
        p(m1.start()+"-"+m1.end());
        
        p(m1.find());
        p(m1.start()+"-"+m1.end());
        p(m1.find());

当匹配不成功时,如果取得匹配字符串的位置将会导致异常,程序无法通过编译。

程序输出:

false
true
0-3
true
4-9
true
10-14
true
15-19
false

posted @ 2016-04-26 22:29  那爱多情  阅读(192)  评论(0)    收藏  举报