对正则表达式说不!!!

可能大家都会和我一样,时常会遇到正则表达式,有时候会忘记某些字符而苦恼。今天就帮助大家克服它,虽然不多,但我认为掌握这些足够了,万变不离其宗,以不变应万变。

一、正则表达式内容分类

  1. 字符类

[abc]:匹配方括号内的任意一个字符,如a、b或c。

[^abc]:匹配方括号内不在的任意一个字符,即匹配除a、b、c之外的任何字符。

[a-z]:匹配任意一个小写字母(范围从a到z)。

[A-Z]:匹配任意一个大写字母(范围从A到Z)。

[0-9]:匹配任意一个数字(范围从0到9)。

[a-zA-Z0-9]:匹配任意一个字母或数字。

  1. 预定义字符类

.:匹配任意单个字符(除换行符\n外)。

\d:匹配任意一个数字(等同于[0-9])。

\D:匹配任意一个非数字(等同于[^0-9])。

\w:匹配任意一个字母、数字或下划线(等同于[a-zA-Z0-9_])。

\W:匹配任意一个非字母、非数字、非下划线的字符(等同于[^a-zA-Z0-9_])。

\s:匹配任意一个空白字符(如空格、制表符\t、换行符\n等)。

\S:匹配任意一个非空白字符。

  1. 边界匹配

^:匹配字符串的开头。

$:匹配字符串的结尾。

\b:匹配单词边界,即单词与非单词字符之间的位置。

\B:匹配非单词边界。

  1. 量词

*:匹配前面的字符或子模式0次或多次。

+:匹配前面的字符或子模式1次或多次。

?:匹配前面的字符或子模式0次或1次。

{n}:匹配前面的字符或子模式恰好n次。

{n,}:匹配前面的字符或子模式至少n次。

{n,m}:匹配前面的字符或子模式至少n次,但不超过m次。

  1. 分组与引用

():将多个字符或模式组合成一个子模式,便于量词修饰或捕获分组。

\1、\2等:表示对捕获分组的引用,\1表示引用第一个捕获分组的内容。

  1. 选择

|:表示"或"的关系,用于匹配多个模式中的任意一个。例如,cat|dog可以匹配"cat"或"dog"。

  1. 转义字符

\:用于转义正则表达式中的特殊字符,使其失去特殊含义。例如,\.表示匹配一个点号.,而不是任意字符。

  1. 断言

(?=...):正向肯定预查,匹配后面跟有指定模式的字符串。

(?!...):正向否定预查,匹配后面不跟有指定模式的字符串。

(?<=...):反向肯定预查,匹配前面有指定模式的字符串。

(?<!...):反向否定预查,匹配前面没有指定模式的字符串。

  1. 非捕获分组

(?:...):非捕获分组,用于分组但不捕获内容,不会创建捕获组。

  1. 模式修饰符

i:不区分大小写。

m:多行模式,^和$会匹配每一行的开头和结尾。

s:单行模式,.会匹配任意字符,包括换行符。

g:全局匹配,匹配字符串中的所有可能位置。

  1. 常见应用场景

手机号码:^1[3456789]\d{9}$

邮箱地址:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

IP地址:^(?:\d{1,3}\.){3}\d{1,3}$

日期:^\d{4}-\d{2}-\d{2}$(如2023-01-01)

二、关于手机号码、邮箱地址、日期的解释(实例)

^1[3456789][0-9]{9}$

解释:

  • ^:表示匹配字符串的开始位置。
  • 1:表示字符串必须以数字1开头。
  • [3456789]:表示第二位数字必须是3、4、5、6、7、8或9中的任意一个。
  • [0-9]{9}:表示接下来的9个字符必须是0到9之间的任意数字。
  • $:表示匹配字符串的结束位置。

作用:

这个正则表达式通常用于匹配符合中国大陆手机号码格式的字符串。中国大陆的手机号码格式通常是11位数字,以1开头,第二位是3到9中的一个数字,后面跟着9位任意数字。

解释:

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

  • ^
    匹配字符串的开头,确保整个字符串从这里开始。
  • [a-zA-Z0-9_.+-]+
    匹配电子邮件地址的用户名部分。
  • [a-zA-Z0-9_.+-]:表示可以匹配任意一个字母(大写或小写)、数字、下划线_、点号.、加号+或减号-。
  • +:表示前面的字符集可以出现一次或多次。例如,example.email+alias是有效的用户名部分。
  • @
    匹配一个@符号,这是电子邮件地址中分隔用户名和域名的必要部分。
  • [a-zA-Z0-9-]+
    匹配电子邮件地址的域名部分(不包括顶级域名)。
  • [a-zA-Z0-9-]:表示可以匹配任意一个字母(大写或小写)、数字或减号-。
  • +:表示前面的字符集可以出现一次或多次。例如,example-domain是有效的域名部分。
  • \.
    匹配一个点号.,用于分隔域名和顶级域名。
  • [a-zA-Z0-9-.]+
    匹配电子邮件地址的顶级域名部分。
  • [a-zA-Z0-9-.]:表示可以匹配任意一个字母(大写或小写)、数字、点号.或减号-。
  • +:表示前面的字符集可以出现一次或多次。例如,com、co.uk或example.com是有效的顶级域名部分。
  • $
    匹配字符串的结尾,确保整个字符串在这里结束。

^\d{4}-\d{2}-\d{2}$

解释:

  • ^
    匹配字符串的开头,确保整个字符串从这里开始。
  • \d{4}
    匹配四位数字,表示年份。例如,2023、1999等。
    匹配一个连字符-,用于分隔年份、月份和日期。
  • \d{2}
    匹配两位数字,表示月份。例如,01(一月)、12(十二月)。
    再次匹配一个连字符-。
  • \d{2}
    匹配两位数字,表示日期。例如,01(1号)、31(31号)。
  • $
    匹配字符串的结尾,确保整个字符串在这里结束。
相关推荐
时之彼岸Φ2 天前
文本操作基础知识:正则表达式
正则表达式
NGC22379992 天前
JavaAPI(字符串 正则表达式)
正则表达式
Dontla3 天前
正则化(Regularization)和正则表达式(Regular Expression)区别
正则表达式
索然无味io3 天前
Python--正则表达式
开发语言·windows·python·安全·web安全·网络安全·正则表达式
Sun_Weiss3 天前
从字符串中匹配多个关键词,优先匹配更长的关键词
python·正则表达式·字符串
玖龍的意志5 天前
正则表达式(Regular expresssion)
python·正则表达式
奔跑吧邓邓子7 天前
【Python深入浅出㉗】Python3正则表达式:开启高效字符串处理大门
开发语言·python·正则表达式
叶不休7 天前
正则表达式--元字符-限定符(4)
前端·css·正则表达式·edge·html·css3·html5
雾间云9 天前
Qt简单使用正则表达式
开发语言·qt·正则表达式