Java复习之正则表达式

这篇博客主要是用来总结一下Java中的正则表达式。

1.认识正则

通过一个简单的程序来了解一下正则有哪些好处:

问题:判断一个字符串是否由数字组成

Demo:

 /** *不使用正则表达式判断一个字符串是否由数字组成 */
        String s="0487561";
        //把字符串转换成字符数组
        char[] cs=s.toCharArray();
        boolean flag=true;
        for (int i=0;iif(!(cs[i]<='9'&&cs[i]>='0'))
            {
                flag=false;
                break;
            }
        }
        if(flag==true)
        {
            System.out.println("字符串由数字组成");
        }else
        {
            System.out.println("字符串不是由数字组成");
        }

2.正则表达式

正则表达式使用单个字符串来描述,匹配一系列符合某个句法规则的字
符串。正则表达式通常被用来检索、替换那些符合某个模式的文本

java.util.regex包中提供以下两个类,对正则表达式的支持:

Matcher类:
通过解释Pattern对character sequence执行匹配操作的引擎

Pattern类
正则表达式的编译表示形式。

Demo:

         /** * 使用正则表达式进行判断 */
        if(s.matches("\\d+"))
        {
            System.out.println("字符串由数字组成");
        }
        else
        {
            System.out.println("字符串不是由数字组成");
        }

3.Pattern类

public final class Pattern extends
Object implements Serializable

正则表达式的编译表达形式。指定为字符串的正则表达式必须首先被编译为此类的实例

典型的调用顺序:
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();

4.Matcher类

public final class Matcher
extends Object
implements MatchResult

Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定
义完的正则,再使用Matcher类进行验证或者替换。

常用的方法:
boolean matches()
尝试将整个区域与模式匹配

String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列

String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列

//匹配的英文符号
        String info="小白是个:高端大气上档次,低调奢华有内涵的人";
        //匹配字符串中的标点符号
        Pattern pattern =Pattern.compile("\\p{Punct}");
        //根据标点符号对字符串进行拆分
        String []str= pattern.split(info);
        for (String s:str) {
            System.out.println(s);
        }
        /** * 使用正则表达式匹配邮箱地址 */
        String email="[email protected]";
        Pattern pattern2 =Pattern.compile("\\w+@\\w+.[a-zA-Z]+");
        Matcher matcher=pattern2.matcher(email);
        if(matcher.matches())
        {
            System.out.println("匹配");
        }
        else {
            System.out.println("不匹配");
        }

        /** * 使用正则表达式替换字符 */
        String date="2013/11/05";
        Pattern pattern3=Pattern.compile("/");
        Matcher m2=pattern3.matcher(date);
        String s2=m2.replaceAll("-");
        System.out.println(s2);

5.String类对正则的支持

在JDK1.4之后加入了正则,随后又更新了String的操作类,因为在
使用正则中,所有的内容通过字符串表示的比较多。在String类中有以下
的方法可以完成对正则表达式的支持:

boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式

String replaceAll(String regex,String replacement)
使用给定的replacement替换此字符串,所有匹配给定的正则表达式的子字符串

String replaceFirst(String regex,String replacement)
使用给定的replacement替换此字符串,匹配给定的正则表达式的第一个字符串

String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串

6.实例

1.验证电话号码(如:010-53517230)
2.验证手机号
3.验证用户名,只能是字母开头的数字、字母或下划线组成

/** * 匹配电话号码 * 区号最少3位,最多4位 X[n,m] 至少n次,不超过m次 */
        String phonenumber="010-53517230";
        boolean b=phonenumber.matches("\\d{3,4}-\\d{7,8}");
        if(b)
        {
            System.out.println("电话号码格式正确");
        }
        else
        {
            System.out.println("电话号码格式不正确");
        }
        /** * 验证手机号: * 要求:必须为11位,首位必须为1,第二位为3~9,之后的尾数随意 */
        String phone="13143188844";
        System.out.println(phone.matches("[1][3-9]\\d{9}"));

        /** * 验证用户名,只能是字母开头的数字、字母或下划线组成 * []表示在这个范围里面 * *表示0次或者多次 * +表示多次 */
        String username="xb1314";
        System.out.println(username.matches("[a-zA-Z]+[\\w|_]*"));

你可能感兴趣的:(Java复习)