黑马程序员 正则表达式1 匹配和切割

来源:互联网 发布:杭州淘宝培训哪家最好 编辑:程序博客网 时间:2024/05/22 01:49

---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

/* * 正则表达式的特点;符合一定规则的表达式 *     专门作用于字符串. * 当我们在做字符串检验的时候一般情况下回先想到的是使用 * String 类当中给我们提供的方法进行组合,但是代码太多,阅读性太差 *  *  * 在Java中有一种方法专门是用于检验,字符串是不是数字的 * Integer.parseInt("123a"); * 如果字符串不都是数字的话就会出现,数字格式异常. * 用这种方式时可以的但是不容易想到,一般情况下是不会使用的. *  * 这个时候就有出现了,一种方式是专门用于检验 * 字符串的,那就是正则表达式,这是专门用于字符串的 * 方法,就是定义一种,方式让字符串按照这个方式来实现 * 正则表达式的出现,大大简化了代码的书写,实现的功能 * boolean boo = str.matches(这里面装的是正则表达式); * boolean boo= str.matches(regex); 就是用字符串定义出来的一个字符串的表达式只要是按照这种做法 来完成就好了 如;String len ="[1-9][0-9]{4,14}"; 这就是在定义一个,数字字符串,第一位置上是1-9,第二个位置上是 0-9,这个位置上的数字的长度是,4-14位  具体实现功能; 1,字符串的匹配用的方法是 String matches(); matches();方法匹配的是整个字符串,只要有一处是 不满足的话就返回false;       正则特点;表达式是用一些特殊符号,来表示一些代码操作      这样的话就简化了书写.      所以我们学习正则表达式,就是在学习一些特殊符号的使用.            在正则表达式当中如果反斜杠出现就是一对一对出现的,因为      正则表达式是字符串,在字符串中 \ 是代表的是转义字符,所以      他会把正则表达式中的在\后面相结合的字符给转义了,所以      要在前面加上一个反斜杠,这样就不会导致,错误出现. [abc] a、b 或 c(简单类) 可以用来判断一个字符串中的,某一个 字符位上出现的字符,要么是a 或者是b 或者是 c 如果是[abc]这样写的 话就只能,是校验的是一个字符.------------------------------------------------------------[^abc] 任何字符,除了 a、b 或 c(否定) 正好和上面是相反的除了abc 其他的都是可以的.这个也是的[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 如果是字母都可以的话,就是用这个,不分大小写的[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) [a-z&&[def]] d、e 或 f(交集) [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) ------------------------------------------------------------. 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] -------------------------------------------------------X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次  代码如下 public class Demo{public static void main(String[] args){//String str= "5696324";//show(str);//run();//demo();String tel="18616483";regex(tel);}//匹配电话号码 13xxx 15xxx  18xxxpublic static void regex(String tel){String len = "1[358]\\d{9}";boolean flag = tel.matches(len);if(flag)System.out.println(tel+"...这个是电话号码");elseSystem.out.println(tel+"....这个不是电话号码");}public static void demo(){String str= "a";String regex= "[bcd]";//这定义的规则是,这个字符串的第一个字符,只能是//bcd 中的一个,而且只能有一个字符.boolean boo = str.matches(regex);System.out.println(boo);}public static void run(){String name="569611324";String len ="[1-9]\\d{4,14}";boolean boo = name.matches(len);if(boo)System.out.println(name+"......这个是可以的");elseSystem.out.println("......出现了不可以出现的字符");}public static void show(String str){int len = str.length();if(len>=5 && len<=15){if(!(str.startsWith("0"))){try{long l = Long.parseLong(str);System.out.println(l);}catch(Exception e){System.out.println("出现非法字符了");}}char[] arr=str.toCharArray();boolean flag = true;for(int x=0;x<arr.length;x++){if(!(arr[x]>'0' && arr[x]<='9')){flag= false;这里做一个标记的意思是,如果遇到不符合条件break;的那么就把标记,该做假,这样只是在判断结果}}if(flag){System.out.println(str);}else{System.out.println("出现非法字符了");}}else{System.out.println("是0开头了");}}else{System.out.println("长度太长了");}}}*/
/*字符串第二大功能 * 切割;用到的方法是 String 类中的split()方法. *  * 在切割中非常重要的概念;为了能让规则的结果被重用,组. * 组的出现都有编号.从1开始.想要使用已有的组可以通过 * \n 的形式来获取 n 代表的就是组的编号. *  *  * 在要被操作的字符串中,要使用叠词的方式来完成对,字符串 * 的操作的时候,这个时候就需要用到组的概念 * 这里面提到的什么叫做叠词呢/ * 就是连续出现两次的字符. * 假如;String s= "dahakkhammhah"; * 上面出现的kk 和 mm 就叫做叠词 * 现在我就是想用叠词的方式把字符串进行切割. * (.)\1 这句话的意思是,叠词出现的可能是任意字符 * 用小括号把它括起来,表示将这个任意字符分成组 * 每组都有自己的编号,这是第一组,后面\1表示把前面 * 第一组中的结果拿过来使用,这样(.)\1 就表示一个叠词了 * */public class Demo{public static void main(String[] args){splitDemo();}public static void splitDemo(){//String str= "zhangsan  wangwu   zhaoliu" ;//String st= " +";//这是按照多个空格来切割的String str= "zhangsan.lisi.wangwu";str="c:\\abc\\a.text" ;str="asgjsdqqghjhssdsgjui";//String st= ".";//如果是按照着样点来切割的话,那么什么都不会//切割到的,点 代表的是任意字符,所以不能用                //如果真的想用 点来切割的话那么需要这样做//String st ="\\.";//而在字符串中,\ 代表的是转义字符要成对出现String st= "\\\\";//这样的方式,就是在用\\来切割的.st= "(.)\\1";String[] arr=str.split(st);for(String s: arr){System.out.println(s);}}}


                                             
0 0