正则表达式

原文链接

在线正则表达式编辑

正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足想要格式的语句。

一个正则表达式(“Regular expression”,缩写为“regex”或“regexp”)是一种从左到右匹配字符串的模式,可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表达表单、提取字符串等。

例子,假设创建一个用户命名的规则,让用户名包含字符、数组、下划线(_)和连字符(-)并限制字符的个数,可以使用以下正则表达式来验证:

image

基本匹配

正则表达式其实就是在执行搜索时的格式,它由一些字母和数组组合而成。

正则表达式描述示例
the由字母t开始,接着是h,再接着是ethe => The fat cat sat on the mat.
TheThe => The fat cat sat on the mat.

正则表达式是大小写敏感的

元字符

正则表达式主要依赖于元字符。

  • 元字符不代表它们本身的字面意思,它们有特殊的含义
  • 一些元字符写在方括号中的时候,有一些特殊的意思
    • [.]表示英文句号,示例:ar[.] => A garage is a good place to park a car.
元字符描述示例
.匹配任意单个字符(除换行符).ar => The car parked in the garage.
[]匹配方括号内的任意字符[Tt]he => The car parked in the garage.
[^]匹配方括号以外的任意字符[^c]ar => The car parked in the garage.
*匹配>=0个*之前的字符[a-z]* => The car parked in the garage #21.
+匹配>=1个+之前的字符c.+t => The fat cat sat on the mat.
??之前的字符为可选[T]?he => The car is parked in the garage.
{n,m}匹配{}前固定数量个字符,数量在n与m之间,m不写表示至少n个,m和,都不写表示固定次数[0-9]{2,3} => The number was 9.9997 but we rounded it off to 10.0.
()匹配与()内完全相同的字符串`(c
``匹配`
\转义字符,匹配保留字符[](){}.*+?^$\|`(f
^匹配行开头`^(T
$匹配行结尾(at\.)$ => The fat cat. sat. on the mat.

简写字符集

简写描述
.匹配所有字符(除换行符)
\w匹配所有字母和数字,等同[a-zA-Z0-9_]
\W匹配所有非字母数字,等同[^\w]
\d匹配数字,等同[0-9]
\D匹配非数字,等同[^\d]
\s匹配所有空格字符,等同[\t\n\f\r\p{z}]
\S匹配所有非空格,等同[^\s]
\f匹配一个换页符
\n匹配一个换行符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符
\p匹配CR\LF,等同\r\n,匹配DOS行终止符

零宽度断言

先行断言和后发断言都属于非捕获簇,不捕获文本也不针对组合进行计数。

符号含义描述示例
?!负先行断言---排除用于筛选所有匹配结果,筛选条件为其后不跟随着断言中定义的格式`(T
?<=正后发断言---存在筛选所有匹配的结果,筛选条件为其前跟随着断言中定义的格式`(?<=(T
?<!负后发断言---排除筛选所有匹配结果,筛选条件为其前不跟随断言中定义的格式`"(?<!(T

标志

标志也叫模式修正符,用来修改表达式的搜索结果,标志可以任意组合使用,是正则表达式的一部分。

标志描述示例
i忽略大小写/The/gi => The fat cat sat on the mat.
g全局搜索/.(at)/g => The fat cat sat on the mat.
m多行修饰符,^,$工作范围在每行的起始/.at(.)?$/gm => The fat <br> cat sat <br> on the mat.

贪婪匹配&惰性匹配

  • 正则表达式默认采用贪婪匹配:/(.*at)/ => The fat cat sat on the mat.
  • 使用?将贪婪匹配转换为惰性匹配:/(.*?at)/ => The fat cat sat on the mat.
上次修改: 14 April 2020