正则表达式(Regular Expression)

特殊字符(Special Characters)

正则表达式中一些字符具有特殊的含义,它们用于表示一类字符或者进行匹配操作。例如:
  • \d:匹配任意数字。
  • \w:匹配任意字母、数字、或下划线。
  • \s:匹配任意空白字符。
  • .:匹配除换行符外的任意单个字符。

字符类(Character Classes)

使用方括号[]来定义一组可匹配的字符,例如[aeiou]表示匹配任意一个元音字母。
使用方括号()来定义一组可匹配的字符,例如(aeiou)表示匹配字符串"aeiou"。

重复次数(Repetitions)

使用限定符来表示字符或者字符类的重复次数。例如:
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • {n}:匹配前面的字符恰好 n 次。
  • {n,}:匹配前面的字符至少 n 次。
  • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。

边界匹配(Anchors)

用于指定匹配的位置,例如:
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。

例子

匹配IP地址

1
^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$
这个表达式的组成部分解释如下:
  1. 25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]:这个部分用于匹配0到255的数字。具体来说,它匹配250-255 (25[0-5]), 200-249 (2[0-4][0-9]), 100-199 (1[0-9][0-9]), 和0-99 ([1-9]?[0-9])。
  2. (……).:这个部分用于匹配三个点加数字的模式,比如”192.”。
  3. {3}:这个部分表示前面的模式会重复三次,用于匹配IP地址的前三段。
  4. 最后的部分: (25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]) 同样用于匹配0到255的数字,对应IP地址的最后一段

匹配yyyy-mm-dd格式的日期

1
^((19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$
  1. ((19|20)\d\d) : 这部分用于匹配年份,可以匹配从1900到2099的年份。在这部分,“\d” 是一个占位符,代表任何数字。

  2. -(0[1-9]|1[012]) : 这部分用于匹配月份。可以匹配从 “01” 到 “09” 以及 “10”, “11”, “12” 这三个月份。

  3. -(0[1-9]|[12][0-9]|3[01]) : 这部分用于匹配日期。可以匹配从 “01” 到 “09”,”10” 到 “19”, “20” 到 “29”,以及 “30”, “31” 这两个日期。

    但是这个正则表达式有一个限制,它并没有在2月份考虑29天(对于闰年而言),并且它也会匹配那些只有30天的月份的31日(如4月、6月、9月和11月)。要完全校验一个日期的正确性,可能最好的方法是使用日期解析函数而不是正则表达式

FAQ

  1. 如何使用vscode搜索中的正则表达式