正则表达式学习记录

正则表达式(Regular Expression)是一种用于匹配字符串的特殊文本模式。它由普通字符和特殊字符(称为元字符)组成,可以用来验证、提取或替换文本。

正则表达式的语法

正则表达式是一种用于匹配字符串的工具,它由普通字符和特殊字符(称为元字符)组成,可以用来验证、提取或替换文本。

普通字符

一个普通字符代表它本身。例如,a 表示字母 a1 表示数字 1。除了部分特殊字符外,正则表达式中的大多数字符都是普通字符。

元字符

元字符是具有特殊含义的字符,用于匹配多个字符或一类字符。下面是常见的元字符及其含义:

  • .(句点):匹配任意单个字符,除了换行符 \n
  • *:匹配前面的字符零次或多次。例如,a* 可以匹配空字符串、aaaaaa 等等。
  • +:匹配前面的字符至少一次。例如,a+ 可以匹配aaaaaa 等等。
  • ?:匹配前面的字符零次或一次。例如,a? 可以匹配空字符串或 a
  • {n}:匹配前面的字符恰好出现 n 次。例如,a{3} 可以匹配 aaa
  • {n,}:匹配前面的字符至少出现 n 次。例如,a{3,} 可以匹配 aaaaaaaaaaaa 等等。
  • {n,m}:匹配前面的字符至少出现 n 次,但不超过 m 次。例如,a{2,4} 可以匹配 aaaaaaaaa
  • []:匹配一类字符。方括号内可以列举出多个字符,表示只要匹配其中的任何一个字符即可。例如,[abc] 可以匹配 字母 abc
  • [^]:表示不匹配方括号中的任何一个字符。例如,[^abc] 表示匹配除字母 abc 以外的任何字符。

特殊字符

下面是一些具有特殊含义的字符:

  • ^:匹配字符串的开头,在方括号内表示取反。例如,^a 表示匹配以字母 a 开头的字符串,[^a] 表示匹配不含字母 a 的字符串。
  • $:匹配字符串的结尾。例如,a$ 表示匹配以字母 a 结尾的字符串。
  • \:转义字符,用于将特殊字符转换为普通字符。例如,\. 表示匹配句点 .,而不是任意单个字符。

模式修饰符

模式修饰符是可选标志,用于改变匹配模式的行为。常见的模式修饰符包括:

  • i:大小写不敏感。例如,/hello/i 可以匹配 HelloHELLOhello
  • m:多行模式。在多行模式下,^$ 分别匹配一行的开头和结尾,而不是整个字符串的开头和结尾。
  • s:单行模式。在单行模式下,. 包括换行符 \n 在内匹配任意单个字符。
  • g:全局模式。在全局模式下,会匹配字符串中的所有符合条件的子串,而不只是第一个。
  • x:忽略空格。在忽略空格模式下,可以在正则表达式中使用空格和换行符,使其更易读。

分组

分组用于将多个元素组合在一起,并为这些元素指定共同的量词或其它操作。

  • ():表示分组。例如,(abc)+ 可以匹配连续出现的 abc,例如abcabcabc 等等。
  • (?:):非捕获型分组。与普通分组类似,但不会被记入捕获组,也就是说,不能在后续的正则表达式中引用它。例如,(?:abc)+ 可以匹配连续出现的 abc,但无法从匹配结果中提取这些 abc

常用正则表达式

以下是一些常见的正则表达式及其应用场景:

  • 匹配电子邮件地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$。这个正则表达式可以匹配大部分常见的电子邮件地址。
  • 匹配 URL:^(http|https)://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$。这个正则表达式可以匹配绝大多数网站的 URL。
  • 匹配日期格式:^\d{4}-\d{1,2}-\d{1,2}$。这个正则表达式可以匹配 yyyy-MM-dd 格式的日期。
  • 匹配手机号码:^1[3456789]\d{9}$。这个正则表达式可以匹配中国大陆的手机号码。
  • 匹配身份证号码:^\d{17}(\d|X|x)$。这个正则表达式可以匹配大陆居民身份证号码。
  • 匹配 IP 地址:\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b。这个正则表达式可以匹配IPv4地址。
  • 匹配 HTML 标签:<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)。这个正则表达式可以匹配HTML标签以及其中的内容。