跳到主要内容

正则表达式

基础

匹配机制
  • 依次匹配各字符。
语法格式
  • 数字 + 字母,
  • 大小写敏感。
"the" => The fat cat sat on **the** mat.

字符

任意字符 .

作用
  • 匹配任意单个字符 (除换行符)。
语法格式
".ar" => The car **par**ked in the **gar**age.

字符集 []

作用
  • 匹配字符集内的任意字符。
语法格式
  • [*char]。
连字符
  • 使用 - 连字符表示范围,
  • [a - c] 等效于 [a,b,c]。
"[Tt]he" => **The** car parked in **the** garage.

字符集取反 ^

作用
  • 匹配除字符集内字符以外的任意字符。
语法格式
  • 放置于字符集前;
"[^c]ar" => The car **par**ked in the **gar**age.

简写字符集

简写字符集
简写描述
.除换行符外的所有字符
\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 行终止符

转义字符

常见转义字符
{}[]
/\+*
.$^|
?

重复次数

*

作用
  • 表示 * 之前的字符出现了任意次数。
语法格式
  • 放置于字符后;
"[a-z]*" => **The car parked in the garage**.

+

作用
  • 表示 * 之前的字符出现了至少一次。
语法格式
  • 放置于字符后;
"c.+t" => The fat **cat sat on the mat**.

?

作用
  • 表示 * 之前的字符出现了 0 次 或 1 次。
语法格式
  • 放置于字符后;
"[T]?he" => **The** car is parked in t**he** garage.

作用
  • 限定 前字符的重复出现次数。
语法格式
  • {num}:固定次数;
  • {min, max}:[min,max] 次。
    • min:可选,默认为 0;
    • max:可选,默认为 Infinity。
"[0-9]{3}" => The number was 9.**999**7 but we rounded it off to 10.0.
"[0-9]{2,}" => The number was 9.**9997** but we rounded it off to **10**.0.

匹配符号

整体 ()

作用
  • 表示 () 包裹的内容视为一个整体。
语法格式
"(c|g|p)ar" => The **car** is **par**ked in the **gar**age.
$n
  • 表示小括号的内容。
    • $1 表示第一个小括号的内容,
    • $2 表示第二个小括号的内容,
    • 以此类推。

或运算 |

作用
  • 表示逻辑运算或。
语法格式
"(T|t)he|car" => **The** **car** is parked in **the** garage.

^ 和 $

^

作用
  • 表示匹配字符串为开头字符串。
语法格式
  • 放置于匹配字符串前。
"^(T|t)he" => **The** car is parked in the garage.

$

作用
  • 表示匹配字符串为结尾字符串。
语法格式
  • 放置于匹配字符串后。
"(at\.)$" => The fat cat. sat. on the m**at.**

零宽度断言

?=

作用
  • 表示匹配结果必须在 ?= 定义的表达式之前。
语法格式
  • 断言 () 包裹,
  • 表达式内容写在 ?= 其后,
  • 表达式紧贴匹配结果,写在匹配结果之后。
"(T|t)he(?=\sfat)" => **The** fat cat sat on the mat.

?!

作用
  • 表示匹配结果不能在 ?! 定义的表达式之前。
语法格式
  • 断言 () 包裹,
  • 表达式内容写在 ?! 其后,
  • 表达式紧贴匹配结果,写在匹配结果之后。
"(T|t)he(?!\sfat)" => The fat cat sat on the **mat**.

?<=

作用
  • 表示匹配结果必须在 ?<= 定义的表达式之后。
语法格式
  • 断言 () 包裹,
  • 表达式内容写在 ?<= 其后,
  • 表达式紧贴匹配结果,写在匹配结果之前。
"(?<=(T|t)he\s)(fat|mat)" => The **fat** cat sat on the **mat**.

?<!

作用
  • 表示匹配结果不能在 ?<! 定义的表达式之后。
语法格式
  • 断言 () 包裹,
  • 表达式内容写在 ?<! 其后,
  • 表达式紧贴匹配结果,写在匹配结果之前。
"(?<!(T|t)he\s)(cat)" => The cat sat on **cat**.

匹配模式

i, g 和 m

一览
标志描述
i忽略大小写.
g全局搜索.
m多行修饰符: 锚点元字符 ^ $ 工作范围在每行的起始.
语法格式
  • 正则表达式 /。。。/ 包裹,
  • /。。/ 其后使用标志。
"/The/gi" => **The** fat cat sat on **the** mat.

"/.at(.)?$/gm" => The **fat**
cat **sat**
on the **mat.**

贪婪匹配与惰性匹配

贪婪匹配
  • 匹配尽可能长的字串,
  • 默认匹配机制。
惰性匹配
  • 匹配尽可能短的字串。
语法格式
  • 使用 ?,
  • 放置于 +,* 后面。
"/(.*?at)/" => **The fat** cat sat on the mat.