2022-04-28 06:40:02 +00:00
|
|
|
---
|
|
|
|
title: 正则表达式随笔
|
|
|
|
date: 2019-08-03 16:03:45 +0800
|
|
|
|
tags: [ regular-expression ]
|
2022-05-18 14:54:44 +00:00
|
|
|
categories: [ tech ]
|
|
|
|
weight: 50
|
|
|
|
show_comments: true
|
|
|
|
draft: false
|
2022-04-28 06:40:02 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
## POSIX基础正则表达式
|
|
|
|
|
|
|
|
### 纯文本
|
|
|
|
|
|
|
|
以文本形式直接写出需要匹配的内容
|
|
|
|
|
|
|
|
> `abc` ===> `abc`
|
|
|
|
|
|
|
|
### 特殊字符
|
|
|
|
|
|
|
|
\.\*\[\*\^\$\{\}+?\\|()
|
|
|
|
|
|
|
|
### 锚字符
|
|
|
|
|
|
|
|
* 行首 ^
|
|
|
|
* 行尾 $
|
|
|
|
|
|
|
|
> `^$` ===> 匹配空行
|
|
|
|
|
|
|
|
### 点号字符
|
|
|
|
|
|
|
|
匹配换行字符之外的任意单个字符, 必须匹配一个字符
|
|
|
|
|
|
|
|
> `a.c` ===> `abc`, `a c`
|
|
|
|
|
|
|
|
### 字符组
|
|
|
|
|
|
|
|
使用方括号定义一个字符组, 方括号中包含素有希望出现在该字符组中的字符
|
|
|
|
|
|
|
|
> `a[bcd]b` ===> `abb`, `acb`, `adb`
|
|
|
|
|
|
|
|
### 排除型字符组
|
|
|
|
|
|
|
|
在普通字符组的起始字符写出一个脱字符`^`, 即可匹配字符组之外的所有字符, 换行符除外
|
|
|
|
|
|
|
|
> `a[^bcd]b` ===> `aab`
|
|
|
|
|
|
|
|
### 区间
|
|
|
|
|
|
|
|
在字符组中单破折号可在字符组中用作区间
|
|
|
|
|
|
|
|
> `a[b-f]b` = `a[bcdef]b` ===> `abb`, `acb`, `adb`, `aeb`, `afb`
|
|
|
|
|
|
|
|
### 特殊字符组
|
|
|
|
|
|
|
|
| 组 | 描述 |
|
|
|
|
| ----------- | ---------------------------------------------- |
|
|
|
|
| [[:alpha:]] | 匹配任意字母字符, 不管大写还是小写 |
|
|
|
|
| [[:alnum:]] | 匹配任意字母数字字符0-9, a-z, A-Z |
|
|
|
|
| [[:blank:]] | 匹配空格或制表符 |
|
|
|
|
| [[:digit:]] | 匹配0-9之间的数字 |
|
|
|
|
| [[:lower:]] | 匹配小写字符a-z |
|
|
|
|
| [[:print:]] | 匹配任意可打印字符 |
|
|
|
|
| [[:punct:]] | 匹配标点符号 |
|
|
|
|
| [[:space:]] | 匹配任意空白字符: 空格, 制表符, NL, FF, VT和CR |
|
|
|
|
| [[:upper:]] | 匹配任意大写字母字符A-Z |
|
|
|
|
|
|
|
|
> `a[[:alnum:]]c` ===> `abc`, `a1c`, `a8c`
|
|
|
|
|
|
|
|
### 星号
|
|
|
|
|
|
|
|
在字符后面放置星号表明该字符必须在匹配模式的文本中出现0次或多次
|
|
|
|
|
|
|
|
> `a[bc]\*c` ===> `abc`, `acc`, `ac`, `abcc`, `abbbbbc`
|
|
|
|
|
|
|
|
## POSIX拓展正则表达式
|
|
|
|
|
|
|
|
### 问号
|
|
|
|
|
|
|
|
在字符后面放置星号表明该字符必须在匹配模式的文本中出现0次或1次
|
|
|
|
|
|
|
|
> `ab?c` ===> `ac`, `abc`
|
|
|
|
|
|
|
|
### 加号
|
|
|
|
|
|
|
|
在字符后面放置加号表明该字符必须在匹配模式的文本中出现1次或多次
|
|
|
|
|
|
|
|
> `ab+c` ===> `abc`, `abbc`, `abbbc`
|
|
|
|
|
|
|
|
### 花括号
|
|
|
|
|
|
|
|
花括号标识允许为可重复的正则表达式指定一个上下限, 通常称为**间隔**
|
|
|
|
|
|
|
|
+ `m` : 正则表达式准确出现m次
|
|
|
|
+ `m,n` : 正则表达式出现至少m次, 至多n次
|
|
|
|
|
|
|
|
> `ab{2}c` ===> `abbc`
|
|
|
|
>
|
|
|
|
> `ab{1,2}c` ===>`abc`, `abbc`
|
|
|
|
|
|
|
|
### 竖线
|
|
|
|
|
|
|
|
表示在检查数据流时, 使用逻辑或的方式指定两个或多个匹配模式
|
|
|
|
|
|
|
|
> `a(b|c)c` ===> `abc`, `acc`
|
|
|
|
>
|
|
|
|
> `abc|abb` ===> `abc`, `abb`
|
|
|
|
|
|
|
|
### 圆括号
|
|
|
|
|
|
|
|
圆括号用于对正则表达式模式进行分组, 分组时, 该组会被视为一个标准字符, 可以向对普通字符一样给该组用特殊字符来限制匹配
|
|
|
|
|
|
|
|
> `Sat(urday)?` ===> `Sat`, `Saturday`
|