正则表达式

正则表达式(Regular Expression,简称Regex)是用于匹配字符串中字符组合的模式。它是编程中一种非常强大的工具,用于执行各种字符串操作,如搜索、替换、校验和解析。


目录

  • 正则表达式在数字校验中的应用
    • 基础数字校验
      • [1. 任意数字](#1. 任意数字)
      • [2. n位数字](#2. n位数字)
      • [3. 至少n位数字](#3. 至少n位数字)
      • [4. m-n位数字](#4. m-n位数字)
    • 复杂数字校验
      • [5. 零和非零开头的数字](#5. 零和非零开头的数字)
      • [6. 非零开头的最多带两位小数的数字](#6. 非零开头的最多带两位小数的数字)
      • [7. 带1-2位小数的正数或负数](#7. 带1-2位小数的正数或负数)
      • [8. 正数、负数和小数](#8. 正数、负数和小数)
      • [9. 有两位小数的正实数](#9. 有两位小数的正实数)
      • [10. 有1~3位小数的正实数](#10. 有1~3位小数的正实数)
    • 整数校验
      • [11. 非零的正整数](#11. 非零的正整数)
      • [12. 非零的负整数](#12. 非零的负整数)
      • [13. 非负整数](#13. 非负整数)
      • [14. 非正整数](#14. 非正整数)
    • 浮点数校验
      • [15. 非负浮点数](#15. 非负浮点数)
      • [16. 非正浮点数](#16. 非正浮点数)
      • [17. 正浮点数](#17. 正浮点数)
      • [18. 负浮点数](#18. 负浮点数)
      • [19. 浮点数](#19. 浮点数)
  • 正则表达式在字符校验中的应用
    • 基础字符校验
      • [1. 汉字校验](#1. 汉字校验)
      • [2. 英文和数字校验](#2. 英文和数字校验)
      • [3. 长度为3-20的所有字符](#3. 长度为3-20的所有字符)
    • 特定字符集校验
      • [4. 由26个英文字母组成的字符串](#4. 由26个英文字母组成的字符串)
      • [5. 由26个大写英文字母组成的字符串](#5. 由26个大写英文字母组成的字符串)
      • [6. 由26个小写英文字母组成的字符串](#6. 由26个小写英文字母组成的字符串)
      • [7. 由数字和26个英文字母组成的字符串](#7. 由数字和26个英文字母组成的字符串)
      • [8. 由数字、26个英文字母或者下划线组成的字符串](#8. 由数字、26个英文字母或者下划线组成的字符串)
    • 语言和符号校验
      • [9. 中文、英文、数字包括下划线](#9. 中文、英文、数字包括下划线)
      • [10. 中文、英文、数字但不包括下划线等符号](#10. 中文、英文、数字但不包括下划线等符号)
    • 特殊字符校验
      • [11. 可以输入含有特定字符](#11. 可以输入含有特定字符)
      • [12. 禁止输入含有特定字符](#12. 禁止输入含有特定字符)
  • 正则表达式在特殊需求中的应用
    • 特殊校验
      • [1. Email地址](#1. Email地址)
      • [2. 域名](#2. 域名)
      • [3. Internet URL](#3. Internet URL)
      • [4. 手机号码](#4. 手机号码)
      • [5. 电话号码](#5. 电话号码)
      • [6. 身份证号](#6. 身份证号)
      • [7. 帐号](#7. 帐号)
      • [8. 密码](#8. 密码)
      • [9. 日期格式](#9. 日期格式)
      • [10. 钱的输入格式](#10. 钱的输入格式)
      • [11. XML文件](#11. XML文件)
      • [12. 中文字符](#12. 中文字符)
      • [13. 双字节字符](#13. 双字节字符)
      • [14. 空白行](#14. 空白行)
      • [15. HTML标记](#15. HTML标记)
      • [16. 腾讯QQ号](#16. 腾讯QQ号)
      • [17. 中国邮政编码](#17. 中国邮政编码)
      • [18. IPv4地址](#18. IPv4地址)
    • 结论

正则表达式在数字校验中的应用

基础数字校验

1. 任意数字

要匹配任意数字(包括0),可以使用以下表达式:

regex 复制代码
^[0-9]*$

2. n位数字

若要匹配恰好n位的数字,表达式如下:

regex 复制代码
^\d{n}$

3. 至少n位数字

对于至少有n位的数字,表达式为:

regex 复制代码
^\d{n,}$

4. m-n位数字

匹配位数在m到n之间的数字,使用:

regex 复制代码
^\d{m,n}$

复杂数字校验

5. 零和非零开头的数字

对于以零或非零开头的数字,正则表达式如下:

regex 复制代码
^(0|[1-9][0-9]*)$

6. 非零开头的最多带两位小数的数字

匹配非零开头且最多带两位小数的数字:

regex 复制代码
^([1-9][0-9]*)+(\.[0-9]{1,2})?$

7. 带1-2位小数的正数或负数

包括正数、负数和最多两位小数的数字:

regex 复制代码
^(-)?\d+(\.\d{1,2})?$

8. 正数、负数和小数

匹配任意正数、负数或小数:

regex 复制代码
^(-|\+)?\d+(\.\d+)?$

9. 有两位小数的正实数

匹配至少有一位整数且有两位小数的正实数:

regex 复制代码
^[0-9]+(\.[0-9]{2})?$

10. 有1~3位小数的正实数

匹配至少有一位整数且有1到3位小数的正实数:

regex 复制代码
^[0-9]+(\.[0-9]{1,3})?$

整数校验

11. 非零的正整数

匹配非零开头的正整数:

regex 复制代码
^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

12. 非零的负整数

匹配非零开头的负整数:

regex 复制代码
^-[1-9]\d*$

13. 非负整数

匹配所有非负整数(包括0):

regex 复制代码
^\d+$ 或 ^[1-9]\d*|0$

14. 非正整数

匹配所有非正整数(包括0):

regex 复制代码
^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

浮点数校验

15. 非负浮点数

匹配非负浮点数:

regex 复制代码
^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16. 非正浮点数

匹配非正浮点数:

regex 复制代码
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17. 正浮点数

匹配正浮点数:

regex 复制代码
^[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. 负浮点数

匹配负浮点数:

regex 复制代码
^-([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. 浮点数

匹配任意浮点数:

regex 复制代码
^(-?\d+(\.\d+)?)$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

正则表达式在字符校验中的应用

基础字符校验

1. 汉字校验

要匹配任意长度的汉字,可以使用以下表达式:

regex 复制代码
^[\u4e00-\u9fa5]{0,}$

2. 英文和数字校验

对于只包含英文字母和数字的字符串,表达式如下:

regex 复制代码
^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

3. 长度为3-20的所有字符

匹配长度在3到20之间的任意字符:

regex 复制代码
^.{3,20}$

特定字符集校验

4. 由26个英文字母组成的字符串

要匹配只包含英文字母的字符串:

regex 复制代码
^[A-Za-z]+$

5. 由26个大写英文字母组成的字符串

匹配只包含大写英文字母的字符串:

regex 复制代码
^[A-Z]+$

6. 由26个小写英文字母组成的字符串

匹配只包含小写英文字母的字符串:

regex 复制代码
^[a-z]+$ 

7. 由数字和26个英文字母组成的字符串

匹配包含数字和英文字母的字符串:

regex 复制代码
^[A-Za-z0-9]+$

8. 由数字、26个英文字母或者下划线组成的字符串

匹配包含数字、英文字母和下划线的字符串:

regex 复制代码
^\w+$ 或 ^\w{3,20}$

语言和符号校验

9. 中文、英文、数字包括下划线

对于包含中文、英文、数字和下划线的字符串:

regex 复制代码
^[\u4E00-\u9FA5A-Za-z0-9_]+$

10. 中文、英文、数字但不包括下划线等符号

匹配包含中文、英文和数字但不包含下划线的字符串:

regex 复制代码
^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

特殊字符校验

11. 可以输入含有特定字符

允许输入包含特定字符的字符串:

regex 复制代码
[^%&',;=?$\x22]+

12. 禁止输入含有特定字符

禁止输入包含特定字符,如波浪号(~)的字符串:

regex 复制代码
[^~]+

正则表达式在特殊需求中的应用

特殊校验

1. Email地址

验证电子邮箱地址是否有效:

regex 复制代码
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

2. 域名

校验域名是否符合标准格式:

regex 复制代码
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

3. Internet URL

匹配互联网URL:

regex 复制代码
[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

4. 手机号码

校验符合中国大陆手机号的格式:

regex 复制代码
^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$

5. 电话号码

校验多种格式的电话号码:

regex 复制代码
^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

6. 身份证号

校验15位或18位的身份证号码:

regex 复制代码
(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)

7. 帐号

校验帐号是否合法:

regex 复制代码
^[a-zA-Z][a-zA-Z0-9_]{4,15}$

8. 密码

校验密码的强度:

regex 复制代码
^[a-zA-Z]\w{5,17}$ 或 (?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$

9. 日期格式

校验日期格式:

regex 复制代码
^\d{4}-\d{1,2}-\d{1,2}$

10. 钱的输入格式

校验金额输入是否符合要求:

regex 复制代码
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

11. XML文件

校验XML文件名是否正确:

regex 复制代码
^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$

12. 中文字符

匹配中文字符:

regex 复制代码
[\u4e00-\u9fa5]

13. 双字节字符

匹配双字节字符,包括汉字:

regex 复制代码
[^\x00-\xff]

14. 空白行

删除空白行:

regex 复制代码
\n\s*\r

15. HTML标记

匹配HTML标记:

regex 复制代码
<(\S*?)[^>]*>.*?|<.*? />

16. 腾讯QQ号

校验腾讯QQ号:

regex 复制代码
[1-9][0-9]{4,}

17. 中国邮政编码

校验中国邮政编码:

regex 复制代码
[1-9]\d{5}(?!\d)

18. IPv4地址

校验IPv4地址:

regex 复制代码
((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

结论

正则表达式是一种强大但复杂的工具,掌握它可以极大地提高处理字符串的效率。然而,正则表达式的复杂性也可能导致难以理解和维护的代码。因此,合理使用正则表达式,并结合代码注释,可以更好地发挥其优势。

相关推荐
运维小贺6 小时前
Nginx常用的模块
运维·nginx·正则表达式
Viooocc1 天前
正则表达式
正则表达式
vvilkim1 天前
开发中常用的正则表达式规则与应用
正则表达式
林深的林2 天前
正则表达式(1)
正则表达式
ThisIsClark3 天前
【玩转正则表达式】正则表达式常用语法汇总
正则表达式
ThisIsClark3 天前
【玩转正则表达式】替换与正则表达式的结合
正则表达式
浪九天4 天前
Java常用正则表达式(身份证号、邮箱、手机号)格式校验
java·开发语言·正则表达式
ThisIsClark4 天前
【玩转正则表达式】将正则表达式中的分组(group)与替换进行结合使用
数据库·mysql·正则表达式
小张-森林人7 天前
Oracle 字符串分割革命:正则表达式与 Lateral Join 的优雅解法
数据库·oracle·正则表达式
Lojarro7 天前
正则表达式
正则表达式