黑马程序员——Java基础---正则表达式

来源:互联网 发布:收银软件 编辑:程序博客网 时间:2024/06/04 19:52

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


正则表达式:其实是用来操作字符串的一些规则。

好处:正则的出现,对字符串的复杂操作变得更为简单。

特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。

弊端:符号的出现虽然简化了书写,但是却降低了阅读性。

其实更多是用正则解决字符串操作的问题。

 

组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。

只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。

(aaa(wwww(ccc))(eee))技巧,从左括号开始数即可。有几个左括号就是几组。

 

常见操作:

1. 匹配:String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

2. 切割:String split();

3. 替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。

class  RegexDemo{public static void main(String[] args) {//demo();//System.out.println((char)11);                //checkTel();//splitDemo("zhangsan.lisi.wangwu","\\.");//splitDemo("c:\\abc\\a.txt","\\\\");//splitDemo("erkktyqqquizzzzzo","(.)\\1+");//按照叠词完成切割。为了可以让规则的结果被重用可以将规则封装成一个组,用()完成。组的出现都有编号,从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数组替换成#。//replaceAllDemo(str,"\\d{5,}","#");String str1 = "erkktyqqquizzzzzo";//将叠词替换成$.  //将重叠的字符替换成单个字母。zzzz->zreplaceAllDemo(str1,"(.)\\1+","$1");}public static void replaceAllDemo(String str,String reg,String newStr){str = str.replaceAll(reg,newStr);System.out.println(str);}public static void splitDemo(String str,String reg){//String reg = " +";//按照多个空格来进行切割String[] arr = str.split(reg);  System.out.println(arr.length);for(String s : arr){System.out.println(s);}}/*匹配手机号段只有 13xxx 15xxx 18xxxx*/public static void checkTel(){String tel = "16900001111";String telReg = "1[358]\\d{9}";System.out.println(tel.matches(telReg));}public static void demo(){String str = "b23a23456789";String reg = "[a-zA-Z]\\d*";boolean b= str.matches(reg);System.out.println(b);}public static void checkQQ(){String qq = "123a454";String regex = "[1-9]\\d{4,14}";boolean flag = qq.matches(regex);if(flag)System.out.println(qq+"...is ok");elseSystem.out.println(qq+"... 不合法");}/*对QQ号码进行校验要求:5~15  0不能开头,只能是数字这种方式,使用了String类中的方法,进行组合完成了需求。但是代码过于复杂。*/public static void checkQQ_1(){String qq = "1882345a0";int len = qq.length();if(len>=5 && len<=15){if(!qq.startsWith("0"))//Integer.parseInt("12a");NumberFormatException{try{long l = Long.parseLong(qq);System.out.println("qq:"+l);}catch (NumberFormatException e){System.out.println("出现非法字符.......");}/*char[] arr = qq.toCharArray();//123a4boolean 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("qq:"+qq);}else{System.out.println("出现非法字符");}*/}else{System.out.println("不可以0开头");}}else{System.out.println("长度错误");}}}


4.  获取:将字符串中的符合规则的子串取出。

操作步骤:
1) 将正则表达式封装成对象。
2) 让正则对象和要操作的字符串相关联。
3) 关联后,获取正则匹配引擎。
4) 通过引擎对符合规则的子串进行操作,比如取出。

import java.util.regex.*;class RegexDemo2 {public static void main(String[] args) {getDemo();}public static void getDemo() {String str = "ming tian jiu yao fang jia le ,da jia。";System.out.println(str);String reg = "\\b[a-z]{4}\\b";// 将规则封装成对象。Pattern p = Pattern.compile(reg);// 让正则对象和要作用的字符串相关联。获取匹配器对象。Matcher m = p.matcher(str);// System.out.println(m.matches());//其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。// 只不过被String的方法封装后,用起来较为简单。但是功能却单一。// boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。// System.out.println(b);// System.out.println(m.group());//用于获取匹配后结果。// System.out.println("matches:"+m.matches());while (m.find()) {System.out.println(m.group());System.out.println(m.start() + "...." + m.end());}}}


0 0
原创粉丝点击