黑马程序员_正则表达式

来源:互联网 发布:wps数据透视图怎么做 编辑:程序博客网 时间:2024/05/27 00:44

------- android培训java培训、期待与您交流! ---------- 

 

正则表达式:正则表达式就是用来代表指定字符串的一种规则(模式)。

1.正则表达式的作用:用于专门操作字符串。

好处:可以简化对字符串的复杂操作。

弊端:符号定义越多,正则越长,阅读性越差。      所以学习正则表达式, 就是在学习一些特殊符号的使用。

2.特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。

3.正则表达式的常见语法:

字符类:

[abc]              abc(简单类)

[^abc]            任何字符,除了abc(否定)

[a-zA-Z]         azAZ,两头的字母包含在内(范围)

预定义字符类:

.                      任何字符  

\d                   数字:[0-9]    数字:[0-9]

\D                  非数字:[^0-9]

\s                   空白字符:[\t\n\x0B\f\r]

\S                   非空白字符:[^\s]

\w                  单词字符:[a-zA-Z_0-9]

\W                  非单词字符:[^\w]

Greedy数量词

X?                   X,一次或一次也没有

X*                   X,零次或多次

X+                   X,一次或多次

X{n}               X,恰好n

X{n,}              X,至少n

X{n,m}           X,至少n次,但是不超过m

正则表达式的具体操作功能

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

public static void ChekQQ()

       {

              Stringqq="297";

              Stringregex="[1-9][0-9]{4,14}";

              booleanflag=qq.matches(regex);//判断字符串是否匹配指定的正则表达式。

              if(flag)

              {

                     System.out.println(qq+"....isok");

              }

              else

              {

                    System.out.println(qq+"....错误的qq");

             }

      }

   

切割:String split()

class SplitDemo

{

      publicstatic void main(String[] args)

      {

             Split_1();

             Split_2();

             Split_3();

             Split_4();

      }

      publicstatic void Split_1()

      {

             Stringstr="zhangsan,lisi,wangwu";

             Stringreg=",";//用,切

             String[]arr=str.split(reg);

             for(String s:arr )

             {

                    System.out.println(s);

             }

      }

      publicstatic void Split_2()

      {

             Stringstr="zhangsan     lisi  wangwu";

             Stringreg=" +";//多个空格的split

             String[]arr=str.split(reg);

             for(String s:arr )

             {

                    System.out.println(s);

             }

      }

      publicstatic void Split_3()

      {

             Stringstr="c:\\my class\\demo.class";

             Stringreg="\\\\";//\\

             String[] arr=str.split(reg);

             for(String s:arr )

             {

                    System.out.println(s);

             }

      }

    public static void Split_4()

      {

             Stringstr="aqaqqsdjsjccbjiio";

             Stringreg="(.)\\1";//按照叠词完成切割

             String[] arr=str.split(reg);

             System.out.println(arr.length);

             for(String s:arr )

             {

                    System.out.println(s);

             }

      }

}

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

class replaceAllDemo

{

      publicstatic void main(String[] args)

      {

             replaceAll_3();

      }

      publicstatic void replaceAll_1()

      {

             Stringstr="abc12323gjkj897k7n7";//把数字换成#

             Stringreg="\\d{2,}";

             Strings=str.replaceAll(reg,"#");

             System.out.println(s);

      }

      publicstatic void replaceAll_2()

      {

             Stringstr="abchhyugkkkbncdddde";//把叠词换成%

             Stringreg="(.)\\1+";

             Strings=str.replaceAll(reg,"^");

             System.out.println(s);

      }

      publicstatic void replaceAll_3()

      {

             Stringstr="aaabgkkknggge";//把叠词换成单词,kkk--->k;

             Stringreg="(.)\\1+";

             Strings=str.replaceAll(reg,"$1");//$特殊的符号

             System.out.println(s);

      }

}

 

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

操作步骤:

1,将正则表达式封装成对象。

2,让正则对象和要操作的字符串相关联。

3,关联后,获取正则匹配引擎。

4,通过引擎对符合规则的子串进行操作,比如取出。

import java.util.regex.*;

class regexDemo

{

      publicstatic void main(String[] args)

      {

             getDemo();

      }

      publicstatic void getDemo()

      {

             Stringstr="da jia hao wo lai zi he bei";

             Stringrege="\\b[a-z]{3}\\b";//单词边界\b

             //将正则表达式封装成对象

             Patternp=Pattern.compile(rege);

             //正则表达式和要操作的字符相关联

             Matcherm=p.matcher(str);

             //循环查找,获取子串。

             while(m.find())

             {

                    System.out.println(m.group());

                    System.out.println(m.start()+".........."+m.end());

             }

      }

}

小练习

练习1

需求:

      将下列字符串转成:我要学编程.

      到底用四种功能中的哪一个呢?或者哪几个呢?

      思路方式:

      1,如果只想知道该字符是否对是错,使用匹配。

      2,想要将已有的字符串变成另一个字符串,替换。

      3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的  子串。

      4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。

代码如下:

class regexTest

{

      publicstatic void main(String[] args)

      {

             Test1();

      }

      publicstatic void Test1()

      {

             Stringstr="我我我我我.....要要要....学学......学学学编编......编编程.....";

             Stringreg="\\.+";

             Strings=str.replaceAll(reg,"");

             System.out.println(s);

             Stringreg2="(.)\\1+";

             Strings2=s.replaceAll(reg2,"$1");

             System.out.println(s2);

      } 

}

练习二:

需求:校验邮箱

代码如下:

class regexTest

{

      publicstatic void main(String[] args)

      {

             ChekMail();

      }

      publicstatic void ChekMail()

      {

             Stringmail="abc123@sina.com.cn";

             Stringreg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配

             Stringreg1="\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。

             System.out.println(mail.matches(reg1));

             System.out.println(mail.matches(reg));

      }

}

 

练习三:

需求:校验IP

代码如下:

import java.util.TreeSet;

class regexTest

{

      publicstatic void main(String[] args)

      {

             ChekIP();

      }

      publicstatic void ChekIP()

      {

             Stringip="192.123.2.234 2.3.44.234127.9.0.4 67.3.2.1";

             ip=ip.replaceAll("(\\d+)","00$1");

             System.out.println(ip);

             ip=ip.replaceAll("0*(\\d{3})","$1");

             System.out.println(ip);

             String[]arr=ip.split(" ");

             TreeSet<String>ts=new TreeSet<String>();

             for(String s:arr)

             {

                    ts.add(s);

             }

             for(Strings:ts)

             {

                    System.out.println(s.replaceAll("0*(\\d+)","$1"));

             }

      }

}

练习四:

需求:对手机号的校验

代码如下:

class Chek

{

      publicstatic void main(String[] args)

      {

             ChekTel();

      }

      publicstatic void ChekTel()

      {

            String tel="15833379886";

             StringTelreg="1[568]\\d{9}";

             System.out.println(tel.matches(Telreg));

      }

}

 

------- android培训java培训、期待与您交流! ---------- 

 

0 0
原创粉丝点击