正则表达式

2018-02-26  本文已影响0人  luoqiang108

正则表达式

正则表达式的作用是规定一个字符串的格式,正则表达式使用一些特殊的字符组合来描述格式。

正则表达式 说明
[abc] a、b、c中任意一个字符
[^abc] 除了a、b、c的任意字符
[a-z] a、b、c、......、z中任意一个字符
[a-zA-Z0-9] az、AZ、0~9中任意一个字符
[a-z&&[^bc]] a~z中除了b和c以外的任意一个字符,其中&&表示“与”的关系
. 任意一个字符
\d 任意一个数字字符,相对于[0-9]
\D 任意一个非数字字符,相对于[^0-9]
\s 空白字符,相对于[\t\n\x0B\f\r]
\S 非空白字符,相对于[^\s]
\w 任意一个单词字符,相对于[a-zA-Z_0-9]
\W 任意一个非单词字符,相对于[^\w]
X? 表示0个或1个X
X* 表示0个或任意多个X
X+ 表示0个到任意多个X(大于等于1个X)
X{n} 表示n个X
X{n,} 表示n到任意多个个X(大于等于n个X)
X{n,m} 表示n到m个X(大于等于n个且小于m个X)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 正则表达式
 */
public class Regex {
    public static void main(String[] args){
        /**
         * Pattern的作用是描述正则表达式的格式支持
         * 使用静态方法compile注册正则表达式生成实例
         */
        /**
         * 使用java的字符串去描述正则表达式的时候,会出现一个冲突
         * 如何描述正则表达式的"."。
         *起因:
         *  在正则表达式中我们想描述一个".",但"."在正则表达式中有特殊的含义,
         *  它代表任意字符,所以我们在正则表达式中想描述"."的愿意要写成"\."。
         *  但是我们用java的字符串去描述正则表达式的时候,因为"."在java字符串
         *  中没有特殊的含义,所以java认为我们书写String s = "\.";是有语法错误的,
         *  因为"."不需要转义。这就产生了冲突。
         *目的:
         *  我们实际的目的很简单,就是要让java的字符串描述"\."
         *  所以,那么在java中"\"是有特殊含义的,代表转义字符
         *  我们只需要将"\"转义为单纯的斜杠"\\"即可描述"\."了。
         *  所以我们用java描述"\."的正确写法是String s = "\\.";
         */
        //定义邮箱正则表达式
        String regMailStr = "^[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.com|\\.cn|\\.net)+$";
        //定义手机号码正则表达式
        String regPhoneStr = "^(\\+86)?\\d{11}$";
        //注册正则表达式
        Pattern pattern = Pattern.compile(regMailStr);
        String mailStr="@abc_defghi123@yahoo.com.cn";
        //匹配字符串,返回描述匹配结果的Matcher实例
        Matcher matcher = pattern.matcher(mailStr);
        //通过调用Matcher的find方法得知是否匹配成功
        if (matcher.find()){
            System.out.println("邮箱格式正确");
        }else {
            System.out.println("邮箱格式错误");//邮箱格式错误
        }
    }
}

实例

    String numRule = "[1][3578]\\d{9}";//"[1]"代表第1位为数字1,"[3578]"代表第二位可以为3、5、7、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
        String phone = "13879668668";
        if (phone.matches(numRule)) { //告知此字符串是否匹配给定的正则表达式
            System.out.println("手机号码符合要求");//手机号码符合要求
        } else {
            System.out.println("手机号码不符合要求");
        }
        //下面正则的含义:必须以http://或https://开头,中间[a-zA-Z0-9.]出现一到多次,之后再拼接:
        //最后以0~9的数字出现0到多次结尾
        String rule = "^(http://|https://)[a-zA-Z0-9.]+:\\d*$";
        //注册正则表达式
        Pattern pattern = Pattern.compile(rule);
        //匹配字符串,返回描述匹配结果的Matcher实例
        Matcher matcher = pattern.matcher("http://www.baidu.com:");
        //通过调用Matcher的find方法得知是否匹配成功
        if (matcher.find()) {
            System.out.println("域名符合要求");//域名符合要求
        }else{
            System.out.println("域名不符合要求");
        }

工具类

import android.text.TextUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexUtil {
    /**
     * 验证手机号是否为正确手机号
     *
     * @param mobile 手机号
     * @return
     */
    public static boolean isMobilePhoneNumber(String mobile) {
        if (TextUtils.isEmpty(mobile)) {
            return false;
        }
        //Pattern p = Pattern.compile("^[1][3,4,5,7,8,9][0-9]{9}$");
        Pattern p = Pattern
                .compile("^(13[0-9]|15[012356789]|166|19[89]|17[3678]|18[0-9]|14[57])[0-9]{8}$");
        Matcher m = p.matcher(mobile);
        m.find();
        return m.matches();
    }

    /**
     * 身份证是否合法
     *
     * @return
     */
    public static boolean isIdCard(String idCard) {
        boolean result = false;
        if (!TextUtils.isEmpty(idCard)) {
            String IDCardRegex = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x|Y|y)$)";
            result = idCard.matches(IDCardRegex);
        }
        return result;
    }

    /**
     * 检测邮箱地址是否合法
     *
     * @param email
     * @return true合法 false不合法
     */
    public static boolean isEmail(String email) {
        boolean flag = false;
        try {
            String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

    /**
     * 纳税人识别号是否合法
     *
     * @param payNumber
     * @return
     */
    public static boolean isPayNumer(String payNumber) {
        if (TextUtils.isEmpty(payNumber)) {
            return false;
        }
        Pattern p = Pattern
                .compile("(^[A-Za-z0-9]{15}$)|(^[A-Za-z0-9]{18}$)|^[A-Za-z0-9]{20}$");
        Matcher m = p.matcher(payNumber);
        return m.matches();
    }
}
上一篇下一篇

猜你喜欢

热点阅读