对正则表达式说不!!!

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

一、正则表达式内容分类

  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. 常见应用场景

手机号码:^13456789\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)

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

^134567890-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 天前
正则指引——Ruby
开发语言·正则表达式·ruby
吴声子夜歌2 天前
正则指引——Golang
开发语言·golang·正则表达式
吴声子夜歌3 天前
正则指引——PHP
开发语言·正则表达式·php
吴声子夜歌5 天前
正则指引——断言
正则表达式
吴声子夜歌5 天前
正则指引——匹配原理
java·正则表达式
吴声子夜歌6 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌7 天前
正则表达式——边界
正则表达式
营养充电站7 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式
吴声子夜歌8 天前
正则表达式——字符组
正则表达式