正则表达式【介绍、内容、常用类、表达式大全】

正则表达式

1、作用:处理文本

1、用途:文本查找,筛选

2、正则表达式的基本介绍

1、用某种模式去匹配字符串的一个公式。

2、正则表达式不止java有

3、正则表达式底层实现

1、理解


2、group源码

    public String group(int group) {
        if (first < 0)
            throw new IllegalStateException("No match found");
        if (group < 0 || group > groupCount())
            throw new IndexOutOfBoundsException("No group " + group);
        if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
            return null;
        return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
    }

3、分组groups[0]、group[1]理解

image-20220630121118268

4、例子

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regexp_ {
    public static void main(String[] args) {
//        表示任意一个数字
        Pattern pattern = Pattern.compile("(\\d\\d)(\\d\\d)");
        String content = "1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。\n" +
                "1997年2月,JDK 1.1面世,在随后的3周时间里,达到了22万次的下载量。4月2日,Java One会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。9月,Java Developer Connection社区成员超过10万。\n" +
                "1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。";
        int no =0;
//
        Matcher matcher = pattern.matcher(content);
//        循环
        while(matcher.find()){
/*
            小结
            1、如果正则表达式有()即分组
            2、取出匹配的字符规则如下
            3、group(0)表示匹配到的字符串
            4、group(1)表示匹配到的字符串的第一组字串
            5、group(2)表示匹配的字符串的第2组字串
            6、分组数不能越界
 */
            System.out.println("找到:"+" "+matcher.group(1));
            System.out.println("找到:"+" "+matcher.group(2));
            System.out.println("找到:"+(++no)+" "+matcher.group(0));
//            System.out.println("找到:"+(++no)+" "+matcher.group(3))/;越界了
        }

    }
}

4、正则表达式语法

4.1、基本介绍

必须了解各种元字符的功能

4.2、元字符(Metacharacter)转义号

1、符号说明:正则表达式检索某些特殊字符串的时候,需要用到转移符号,否则检索不到结果。或者报错

2、转义符号:"\\"正则表达式是两个,java是一个

3、常见需要用到转义字符有:.*+()$/\?[]^{}

4、注意:[]中的.表示本身

(1)"."表示匹配所有字符

4、例子

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

public class RegExp02 {
    public static void main(String[] args) {
        String content = "abc(111(111(111(222(34445";
        //匹配(
        String regStr="\\(";//其中\\就是转义字符
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println("找到"+matcher.group(0));
        }
    }
}

4.3、元字符-字符匹配符

1、内容

image-20220630124402921

image-20220630124410065

2、实例

3、代码实现

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

/**
 * 演示字符串匹配符使用
 */
public class RegExp03 {
    public static void main(String[] args) {
        String content = " @@aadAaDladAADDGSSEfsdfga124234lc9";
//        String regStr = "[a-z]";//需要匹配的a-z任意字符
//        String regStr = "[A-Z]";//需要匹配的A-Z任意字符
//        String regStr = "a";//默认大小写区分
//        匹配不区分大小写
//        String regStr = "(?i)a";//不区分大小写,方法一
//        String regStr = "a(?i)d";//不区分大小写,方法一
//        String regStr = "[^a-z]";//匹配不在a-z之间任意一个字符
//        String regStr = "[abcd]";//匹配在abcd中任意一个字符
//        String regStr = "\\D";//匹配非数字字符
//        String regStr = "\\w";//匹配在任意字母、数字、下划线
//        String regStr = "\\W";//匹配和w取反操作
//        String regStr = "\\s";//匹配空白字符
//        String regStr = "\\S";//匹配和s取反
        String regStr = ".";//匹配除了\n其他都可以匹配

//      创建对象时,制定Pattern.CASE_INSENSITIVE,表示匹配是不区分大小写的
//        Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while(matcher.find()){
            System.out.println("找到"+matcher.group(0));
        }
    }
}

4.4、元字符-选择匹配符

1、内容

image-20220630141815036

2、例子

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

public class RegExp04 {
    public static void main(String[] args) {
        String content ="qintao 琴 秦涛";
        String regStr= "qin|琴|秦涛";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到"+matcher.group(0));
        }
    }
}

4.5、元字符-限定符

1、内容

image-20220630142526894

细节:java匹配默认是贪婪匹配,尽可能匹配多的

2、例子

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

public class RegExp05 {
    public static void main(String[] args) {
        String content ="11141111a1aa1aaaaa";
//        String regStr="a{3}";//表示匹配aaa
//        String regStr="1{5}";//表示匹配11111
//        String regStr="\\d{3}";//表示匹配3个任意数字字符
        //细节:java匹配默认是贪婪匹配,尽可能匹配多的
//        String regStr="1{3,4}";//表示匹配111 或者1111
//        String regStr="1{2,5}";//2,3,4,5个
//        String regStr="1+";//匹配一个1或者多个1
//        String regStr="\\d+";//匹配一个数字或者多个数字
//        String regStr="1*";//匹配0个1 或者多个1
//      演示?的使用
        String regStr="a1?";//匹配a或者a1

        Pattern pattern  = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while(matcher.find()){
            System.out.println("找到"+matcher.group(0));
        }
    }
}

4.6、元字符-定位符

1、内容

image-20220630201845233

2、例子

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

public class RegExp06 {
    public static void main(String[] args) {
//        String content ="123-abc";
        String content ="wc wcwawc nsdashaguawc";
//        以至少1个数字开头,后接任意个小写字母字符串
//        String regStr = "^[0-9]+[a-z]*";
//        以至少1个数字开头,必须以至少一个小写字母结束
//        String regStr = "^[0-9]+[a-z]+$";
//        String regStr = "^[0-9]+-[a-z]*";

//        表示匹配边界的行wc ,这里的边界是指:被匹配的字符串最后,也可以是
//        空格的子字符串的后面
        String regStr = "wc\\B";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println("找到: "+matcher.group(0));
        }
    }
}

5、正则表达式—捕获分组和非捕获分组

5.1、捕获分组

1、就是可以用命名来进行分组

2、格式

image-20220702095733858

3、例子

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

public class RegExp07 {
    public static void main(String[] args) {
        String content ="11223344";
        String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)";
        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("通过下标找到"+matcher.group(0));//表示所有
            System.out.println("通过组名找到"+matcher.group("g1"));
            System.out.println("通过下标找到"+matcher.group(1));
            System.out.println("通过组名找到"+matcher.group("g2"));
        }
    }
}

5.2、非捕获分组(特别分组)

1、内容

image-20220702100801739

2、注意:以上三个都是非捕获分组,无法通过组名来获取内容

3、例子

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

public class RegExp08 {
    public static void main(String[] args) {
        String content ="aa秦涛大哥、bb秦涛善良、cc秦涛帅气、dd我喜欢人";

//        题目1、找到秦涛大哥,秦涛善良,秦涛帅气
//        非捕获分组,不能使用组名获取
//        String regStr = "秦涛(?:大哥|帅气|善良)";

//        题目2、找到秦涛大哥、秦涛帅气,不要秦涛善良
//        非捕获分组,不能使用组名获取
//        String regStr = "秦涛(?=大哥|帅气)";

//        题目3、找到秦涛善良,不要秦涛帅气,秦涛大哥,和上一题取反
//        非捕获分组,不能使用组名获取
        String regStr = "秦涛(?!大哥|帅气)";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到:"+ matcher.group(0));

        }

    }
}

6、正则表达式—非贪婪匹配

1、内容:+?

2、例子

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

/**
 * 非贪婪匹配
 */
public class RegExp09 {
    public static void main(String[] args) {
        String content = "aaaaaaaaaaaaaaaa";
//        String regStr = "\\w+"; //默认贪心算法匹配,匹配最多的字符
        String regStr = "\\w+?";//非贪心算法匹配

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到了:"+matcher.group(0));
        }
    }
}

7、正则表达式实例

7.1、题目

(1)验证汉字(找到汉字范围:\u0339-\uffe5)

 String content = "啊啊大领导会计法";
 String regStr = "^[\u0339-\uffe5]+$";

(2)邮政编码:要求1-9开头的6位数

String content = "122222";
String regStr ="^[1-9]\\d{5}$";

(3)qq号码:1-9开头的眼光(5-10)位数

String content = "12222212";
String regStr = "^[0-9]\\d{4,9}$";

(4)手机号码:必须13/14/15/18开头的11位数字

String content = "13222212134";
String regStr = "^1(?:3|4|5|8)\\d{9}$";
String regStr = "^1[3|4|5|8]\\d{9}$";

7.2、复杂URL地址匹配

1、例子

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

public class RegExp11 {
    public static void main(String[] args) {
        String content = "https://www.bilibili.com/video/BV1Eq4y1E79W?p=17&spm_id_from=pageDriver&vd_source=39acca4b6208d4992ddb44c1032e9230";
        String regStr = "^((http|https)://)?([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=#&/%.]*)?$";//在[]中的字符表示的是本身

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        if(matcher.find()){
            System.out.println(matcher.group(0)+"匹配成功");
        }else{
            System.out.println("匹配失败");
        }
    }
}

2、说明

(1)在[]中的字符表示的是本身

7.3、结巴去重案例

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

public class RegExp13 {
    public static void main(String[] args) {
        String content= "我...我要....学学学...编程java!";

//        方法一:
        Pattern pattern = Pattern.compile("\\.");
        Matcher matcher = pattern.matcher(content);

        content = matcher.replaceAll("");
        System.out.println("替换结果为:"+content);

//        去掉相同的文字
        /*
        思路
        使用(.)\\1+来匹配相同的字
        反向引用$1来替换匹配到的内容,就是外部
         */
        pattern =Pattern.compile("(.)\\1+");
        matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到了:"+matcher.group(0));//找到了重复的
        }
//        使用反向引用$1来替换匹配到的字符
        content = matcher.replaceAll("$1");
        System.out.println("content="+content);

//        方法二、
        content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
        System.out.println("找到:"+content);
    }

8、正则表达式三个常用类

8.1、Pattern类

1、介绍

2、常用方法

1、matcher(匹配规则,匹配内容);较为简单,返回boolean值,且可以省略^$定位符

(1)底层

image-20220702124319232

8.2、Matcher类

1、介绍

image-20220702122237941

2、常用方法

3、例子

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

public class MatcherMethod {
    public static void main(String[] args) {
        String content = "hello edu jack tom hello smith qt dasb dasb ";
        String regStr ="hello";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println("=============================");
            System.out.println(matcher.start());//返回匹配到的首个位置
            System.out.println(matcher.end());//返回匹配到的尾位置

        }
//        如果有dasb就替换成nsa
        regStr ="dasb";
        pattern =Pattern.compile(regStr);
        matcher =pattern.matcher(content);
//        注意,返回字符串才是替换后的字符串,原本不变化
        String newContent = matcher.replaceAll("nsa");
        System.out.println("原本的:"+content);
        System.out.println("新的字符串是:"+newContent);

    }
}

8.3、PatternSyntaxException类

1、介绍

image-20220702122341405

9、分组、捕获、反向引用

9.1、介绍

image-20220702130413241

9.2、反向引用

1、引入例子

image-20220702131145217

2、注意:反向引用需要分组或者捕获后,\\(反向引用符号)x(x表示位数)

3、理解

(1)例:
String regex = "^(\d)\1$";
首先这里是匹配两位,\d一位,\1又引用\d一位 这里的\1会去引用(\d)匹配到的内容,因为(\d)是第一次匹配到的内容。
如:str = "22"时,(\d)匹配到2,所以\1引用(\d)的值也为2,所以str="22"能匹配
str = "23"时,(\d)匹配到2,因为\1引用(\d)的值2,而这里是3,所以str="23"不能匹配

4、例子

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

public class RegExp12 {
    public static void main(String[] args) {
//        String content = "hell 11111 24 4364 1234";
//        作用,找到连续相同的数字
//        String regStr = "(\\d)\\1";

//        找到连续相同的5个数
//        String regStr = "(\\d)\\1{4}";

/*
        请在字符串中检索商品称号,形式如123321-333666888
        要求前面满足一个五位数和-。和9位数,每3位相同
 */
        String content = "12321-333666888";
        String regStr = "\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}"; //其中\\x,x就是分组后的下标
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

10、正则表达式—替换分割匹配

10.1、替换匹配

1、replaceAll(匹配规则,匹配内容)

(1)例子

public class StringReg {
    public static void main(String[] args) {
        String content = "jdk1.3  jdk1.5";
        content = content.replaceAll("JDK1\\.3|JDK15","jdk");
        System.out.println(content);
        content ="13813334644";
        if(content.matches("1(38|39)\\d{8}")){
            System.out.println("验证成功");
        }else {
            System.out.println("验证失败");
        }

    }
}

10.2、分割功能

1、splitt(String 匹配规则)

2、例子

public class StringReg {
    public static void main(String[] args) {
        String content = "jdk1.3  jdk1.5";
        content = content.replaceAll("JDK1\\.3|JDK15","jdk");
        System.out.println(content);
        content ="13813334644";
        if(content.matches("1(38|39)\\d{8}")){
            System.out.println("验证成功");
        }else {
            System.out.println("验证失败");
        }
//        根据特殊符进行分割
        content = "hello#abc-aaa-smith~北京";
        String []  split = content.split("#|-|~");
        for(String s :split){
            System.out.println(s);
        }
    }
}

10.3、家庭作业

1、验证邮箱

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

public class homeWork01 {
    public static void main(String[] args) {
        String content = "1s_-@sss.com";
        String regStr ="^[\\w\\-]+@?([a-zA-Z]+\\.)+[a-zA-Z]+$";
        Pattern pattern =Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        if(matcher.find()){
            System.out.println("找到:"+content);
        }else {
            System.out.println("失败");
        }
    }
}

2、匹配整数或小数

/**
 * 要求:验证是不是整数或者小数
 * 提示:考虑整数和负数
 * 例如:123 -345  34.89 -89.9 -0.01 0.45
 */
public class HomeWork02 {
    public static void main(String[] args) {
        String content = "123.666";//整体匹配,单个值
        String regStr = "^[+-]?([1-9]\\d*|0\\d)(\\.\\d+)?$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        if(matcher.find()){
            System.out.println("成功找到");
        }else {
            System.out.println("失败,找不到");
        }
    }
}

3、截图地址的协议、域名、端口号、文件名

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

public class HomeWork03 {
    public static void main(String[] args) {
        String content ="http://www.sohu.com:8080/abc/inde@#$%^&*()x.htm";
        String regStr = "^([a-zA-Z]+)://([a-zA-Z.]+):(\\d+)[\\w-/]*/([\\w.@#$%^&*()]+)$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到协议:"+matcher.group(1));//
            System.out.println("找到域名:"+matcher.group(2));
            System.out.println("找到端口号:"+matcher.group(3));
            System.out.println("找到文件名:"+matcher.group(4));
        }
    }
}

11、正则表达式大全

一、校验数字的表达式

1、 数字:^[0-9]*$

2、 n位的数字:^\d{n}$

3、 至少n位的数字:^\d{n,}$

4、 m-n位的数字:^\d{m,n}$

5、 零和非零开头的数字:^(0|[1-9][0-9]*)$

6、 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

7、 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$

8、 正数、负数、和小数:^(-|+)?\d+(.\d+)?$

9、 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

10、 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

11、 非零的正整数:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$

12、非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$

13、 非负整数:^\d+$ 或 ^[1-9]\d*|0$

14、 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15、 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$

16、 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$

17、 正浮点数:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$

18、 负浮点数:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$

19、 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$

二、校验字符的表达式

1、 汉字:^[\u4e00-\u9fa5]{0,}$

2、 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

3、 长度为3-20的所有字符:^.{3,20}$

4、 由26个英文字母组成的字符串:^[A-Za-z]+$

5、 由26个大写英文字母组成的字符串:^[A-Z]+$

6、 由26个小写英文字母组成的字符串:^[a-z]+$

7、 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

8、 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

9、 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

10、 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

11、 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+

12、 禁止输入含有~的字符:[^~\x22]+

三、特殊需求表达式

1、 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$

2、 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3、 InternetURL:[a-zA-z]+://[^\s] 或 ^https://([\w-]+\.)+[\w-]+(/[\w-./?%&=])?$

4、 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

5、 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$

6、 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

7、 身份证号:
(1) 15或18位身份证:^\d{15}|\d{18}$
(2) 15位身份证:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
(3) 18位身份证:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$

8、 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

9、 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

10、 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$

11、 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$

12、 日期格式:^\d{4}-\d{1,2}-\d{1,2}

13、 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

14、 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15、 钱的输入格式:

16、 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

17、 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$

18、 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

19、 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$

20、 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$

21、 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

22、 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

23、 到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

24、 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

25、 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$

26、 中文字符的正则表达式:[\u4e00-\u9fa5]

27、 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

28、 空白行的正则表达式:\n\s*\r (可以用来删除空白行)

29、 HTML标记的正则表达式:<(\S?)[^>]>.?|<.? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

30、 首尾空白字符的正则表达式:^\s|\s$或(^\s)|(\s$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

31、 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

32、 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)

33、 IP地址:\d+.\d+.\d+.\d+ (提取IP地址时有用)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇