正则表达式(掌握)

正则在java的开发中有着很重要的地位,包括javaScript也都是支持正则的,正则实际上最早是PHP上的一种发展产物,在JDK1.4之前如果想要使用正则,则需要独立进行开发包的配置,在JDK1.4之后,程序中增加了对正则的支持。

1、为什么要有正则?

例如:现在有如下的一种程序要求:要求判断一个字符串是否由数字组成?

按照之前的做法,程序的基本思路:将字符串拆分成字符数组,之后依次判断,是否是数字。

package org.lxh.regextdeno;

public class RegexDemo01

{

         public static void main(String[] args)

        {

                  String str ="12134123414123";

                  char c [] = str.toCharArray();             //将字符串变为字符数组

                  boolean flag = true;

                  for (int i = 0; i<c.length; i++)

                  {

                            //不是数字

                            if (!(c[i]>='0' && c[i]<='9'))

                            {

                                         flag = false;

                                         break;

                            }

                  }

                  if (flag)

                  {

                              System.out.println("字符串是由数字组成!");

                  }

                  else

                  {

                              System.out.println("字符串不是由数字组成!");

                  }

 

        }
}

那么,如果此时使用了正则完成功能,则代码变得非常简单;

package org.lxh.regextdeno;

public class RegexDemo02

{

         public static void main(String[] args)

        {

                  String str ="12134123414123";

                  if (str.natches("\\d+))

                  {

                              //使用正则

                              System.out.println("字符串是由数字组成!");

                  }

                  else

                  {

                              System.out.println("字符串不是由数字组成!");

                  }


        }
}

很明显,使用后者更加简单,因为代码较少,那么在程序中的\\d就是正则表达式。

2、正则表达式

如果要想了解全部的正则,则应该查询java.util.regex.Pattern类。

                                    字符取值范围

No          表达式                                     描述

1、         [abc]                   表达内容可能是a,可能是b,也可能是c

2、         [^abc]                 表示内容不是a、b、c中的任意一个

3、         [a-zA-Z]               表示全部的英文字符,包括大小写,[a-z]:表示全部小写字符;[A-Z]:表示全部大写字母

                                     简洁的字符表示

No          表达式                                     描述

1、         .                          匹配任意的字符

2、         \d                        表示由数字组成

3、         \D                       表示由非数字组成

4、        \s                         表示全部的空格:[\t\n\x0B\f\r]

5、        \S                        表示不是空格

6、        \w                       表示由字母、数字、_组成

7、        \W                       表示由非字母、数字、_组成

                                     数量表达式

No          表达式                                     描述

1、          ?                      表示出现0次或1次

2、          *                       表示出现0次、1次或多次

3、          +                       表示出现1次或多次

4、         {n}                     表示正好出现n次

5、         {n,}                    表示出现n次以上

6、         {n,m}                 表示出现n-m次

3、pattern类

pattern类,表示匹配的正则表达式

pattern类中并不存在构造方法,因为构造方法被私有化了,如果要想进行实例化操作,则需要使用以下的方法:

public static Pattern compile(Sting regex):指定要使用的正则表达式3

在Pattern类中提供了拆分字符串的操作:
public String[] split(Char Sequence input)

package org.lxh.regextdemo;

import java.util.regex.Pattern;

public class PatternDemo

{

         public static void main(String [] args)

         {

                   String str = "TOM:30|JERRY:31|PAPA:32";

                   String regex = "\\|";

                   Pattern pat = Pattern.cospile(regex);          //执行拆分操作

                   String sl[]  = pat.split(str);                        //拆分

                   for (int i = 0; i< sl.length; i++)

                   {

                             Systrm.out.println(sl[i]);    //输出

                   }

         }
}

4、Matcher类

Matcher类的主要功能是进行验证及替换操作。但是,此类的实例化需要依靠Pattern类的以下方法:

public Matcher matcher(Char Sequence input)

Matcher类的以下两个方法最为常用:

1)验证字符串是否合法:public boolean matches()

2)字符串替换:public String replaceAll(String replacement)

5、String类对正则的支持(重点)

在实际的操作中,为了方便用户使用正则往往很少去直接使用Matcher或Pattern类,而使用String类,在String类中提供了以下的方法用于正则的支持:

1)验证:public boolean matches(String regex)

2)替换:public String replaceAll(String regex,String replaxement)

3)拆分:public String[] split(String regex)

范例:验证用户名长度是否是6~15位

package org.lxh.regextdemo;

public class StringRegexDemo01

{

         public static void main(String[] args)

         {

                  String str = "aaaaaaaaaaaa";

                  Systrm.out.println(str.matches("\\w{6,15}"));
         }

}

范例:验证一个email之地是否合法

package org.lxh.regextdemo;

public class StringRegexDemo02

{

         public static void main(String[] args)

         {

                  String str =" [email protected]";

                  String regex = "\\w+@\\w+.(com|net.cn)";

                  Systrm.out.println(str.matches(regex));
          }

}

6、总结

1)整个java的类库在复习的时候一定要结合doc文档去看。

2)大数操作的两个类:BigInteger、BigDecimal两个类很重要。

3)了解对戏那个克隆的基本原理。

4)SimpleDateFormat类的使用。

5)正则表达式。

你可能感兴趣的:(正则表达式(掌握))