auto commit

This commit is contained in:
CyC2018
2020-11-17 00:32:18 +08:00
parent f5ad47b470
commit 7e61fc1360
380 changed files with 2371 additions and 46715 deletions

View File

@ -1,19 +1,10 @@
# 正则表达式
<!-- GFM-TOC -->
* [概述](#一概述)
* [匹配单个字符](#二匹配单个字符)
* [匹配一组字符](#三匹配一组字符)
* [使用元字符](#四使用元字符)
* [重复匹配](#五重复匹配)
* [位置匹配](#六位置匹配)
* [使用子表达式](#七使用子表达式)
* [回溯引用](#八回溯引用)
* [前后查找](#九前后查找)
* [嵌入条件](#十嵌入条件)
* [参考资料](#参考资料)
* [正则表达式](#正则表达式)
<!-- GFM-TOC -->
# 概述
## 概述
正则表达式用于文本内容的查找和替换
@ -21,7 +12,7 @@
[正则表达式在线工具](https://regexr.com/)
# 匹配单个字符
## 匹配单个字符
**.** 可以用来匹配任何的单个字符但是在绝大多数实现里面不能匹配换行符
@ -39,7 +30,7 @@ C.C2018
My name is **CyC2018** .
# 匹配一组字符
## 匹配一组字符
**[ ]** 定义一个字符集合
@ -65,9 +56,9 @@ abc[^0-9]
2. abc1
3. abc2
# 使用元字符
## 使用元字符
## 匹配空白字符
### 匹配空白字符
| 元字符 | 说明 |
| :---: | :---: |
@ -82,23 +73,23 @@ abc[^0-9]
\r\n\r\n 可以匹配 Windows 下的空白行因为它匹配两个连续的行尾标签而这正是两条记录之间的空白行
## 匹配特定的字符
### 匹配特定的字符
### 1. 数字元字符
#### 1. 数字元字符
| 元字符 | 说明 |
| :---: | :---: |
| \d | 数字字符等价于 [0-9] |
| \D | 非数字字符等价于 [^0-9] |
### 2. 字母数字元字符
#### 2. 字母数字元字符
| 元字符 | 说明 |
| :---: | :---: |
| \w | 大小写字母下划线和数字等价于 [a-zA-Z0-9\_] |
| \W | \w 取非 |
### 3. 空白字符元字符
#### 3. 空白字符元字符
| 元字符 | 说明 |
| :---: | :---: |
@ -107,7 +98,7 @@ abc[^0-9]
\x 匹配十六进制字符\0 匹配八进制例如 \xA 对应值为 10 ASCII 字符 \n
# 重复匹配
## 重复匹配
- **\+** 匹配 1 个或者多个字符
- **\** * 匹配 0 个或者多个字符
@ -127,7 +118,7 @@ abc[^0-9]
**匹配结果**
**abc.def<span>@</span>qq.com**
**abc.def\<span\>@\</span\>qq.com**
- **{n}** 匹配 n 个字符
- **{m,n}** 匹配 m\~n 个字符
@ -147,15 +138,15 @@ a.+c
由于 + 是贪婪型的因此 .+ 会匹配更可能多的内容所以会把整个 abcabcabc 文本都匹配而不是只匹配前面的 abc 文本用懒惰型可以实现匹配前面的
# 位置匹配
## 位置匹配
## 单词边界
### 单词边界
**\b** 可以匹配一个单词的边界边界是指位于 \w \W 之间的位置**\B** 匹配一个不是单词边界的位置
\b 只匹配位置不匹配字符因此 \babc\b 匹配出来的结果为 3 个字符
## 字符串边界
### 字符串边界
**^** 匹配整个字符串的开头**$** 匹配结尾
@ -185,7 +176,7 @@ a.+c
6. &nbsp;&nbsp;&nbsp;&nbsp; int c = a + b;
7. }
# 使用子表达式
## 使用子表达式
使用 **( )** 定义一个子表达式子表达式的内容可以当成一个独立元素即可以将它看成一个字符并且使用 * 等元字符
@ -239,7 +230,7 @@ IP 地址中每部分都是 0-255 的数字,用正则表达式匹配时以下
2. 00.00.00.00
3. 555.555.555.555
# 回溯引用
## 回溯引用
回溯引用使用 **\n** 来引用某个子表达式其中 n 代表的是子表达式的序号 1 开始它和子表达式匹配的内容一致比如子表达式匹配到 abc那么回溯引用部分也需要匹配 abc
@ -257,11 +248,11 @@ IP 地址中每部分都是 0-255 的数字,用正则表达式匹配时以下
**匹配结果**
1. **&lt;h1>x&lt;/h1>**
2. **&lt;h2>x&lt;/h2>**
3. &lt;h3>x&lt;/h1>
1. **&lt;h1\>x&lt;/h1\>**
2. **&lt;h2\>x&lt;/h2\>**
3. &lt;h3\>x&lt;/h1\>
## 替换
### 替换
需要用到两个正则表达式
@ -291,7 +282,7 @@ IP 地址中每部分都是 0-255 的数字,用正则表达式匹配时以下
(313) 555-1234
## 大小写转换
### 大小写转换
| 元字符 | 说明 |
| :---: | :---: |
@ -325,11 +316,11 @@ $1\U$2\E$3
aBCd
# 前后查找
## 前后查找
前后查找规定了匹配的内容首尾应该匹配的内容但是又不包含首尾匹配的内容
向前查找使用 **?=** 定义它规定了尾部匹配的内容这个匹配的内容在 ?= 之后定义所谓向前查找就是规定了一个匹配的内容然后以这个内容为尾部向前面查找需要匹配的内容向后匹配用 ?<= 定义: JavaScript 不支持向后匹配Java 对其支持也不完善
向前查找使用 **?=** 定义它规定了尾部匹配的内容这个匹配的内容在 ?= 之后定义所谓向前查找就是规定了一个匹配的内容然后以这个内容为尾部向前面查找需要匹配的内容向后匹配用 ?\<= 定义: JavaScript 不支持向后匹配Java 对其支持也不完善
**应用**
@ -347,9 +338,9 @@ aBCd
对向前和向后查找取非只要把 = 替换成 ! 即可比如 (?=) 替换成 (?!) 取非操作使得匹配那些首尾不符合要求的内容
# 嵌入条件
## 嵌入条件
## 回溯引用条件
### 回溯引用条件
条件为某个子表达式是否匹配如果匹配则需要继续匹配条件表达式后面的内容
@ -367,7 +358,7 @@ aBCd
2. **abc**
3. (abc
## 前后查找条件
### 前后查找条件
条件为定义的首尾是否匹配如果匹配则继续执行后面的匹配注意首尾不包含在匹配的内容中
@ -385,13 +376,6 @@ aBCd
2. 22222-
3. **33333-4444**
# 参考资料
## 参考资料
- BenForta. 正则表达式必知必会 [M]. 人民邮电出版社, 2007.
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>