文章目录
deerchao.net 正则表达式30分钟教程
1. 元字符:
格式: 元字符+文字
文字: 空格也属于文字

1.1 元字符
| 元字符 | 解释 |
|---|---|
| + | 前面内容出现连续出现1次或多次 |
| * | 前面内容出现任意次.包括0次 |
| ? | 前面内容出现0次或1次 |
| {n} | 正好出现n次 |
| {n,m} | 出现从n到m次 |
1.2 指代特定内容的字符
| 特定字符 | 解释 |
|---|---|
| \d | 数字字符 \D所有非数字字符 |
| \w | 文字(包括数字和下划线) 字符 |
| \W | 所有非文字字符 |
| \s | 空白字符(空格、换行等) |
| \S | 所有非空白字符 |
| . | 所有字符: 但默认时不能代表换行符 |
1.3 转义字符
| 转义字符 | 解释 |
|---|---|
| \ | 在正则表达式中,改变后面字符的含义,比如讲元字符转变为普通文字 |
1.4.字符组
| 字符组 | 解释 |
|---|---|
| []字符组 | 代表一个字符,且必须是方括号里边的字符之一,里边的字符至少出现一次 |
| []内的特殊字符 | [^]:出现在方括号内第一位,表示非的意思 例:[^-]非-号以外的任意字符注意: ^ 不出现在第一位,则不代表非,就是一个普通的字符 |
| [x-x] | 出现在两个字符中间,代表范围, 所有编码大于左侧,小于右侧的字符 例: [a-z],[3-8] |


1.5 分组显示
| 字符 | 解释 | - |
|---|---|---|
| () | 将字符分组作为一个整体 例如: \sa(bc)+\s | 分组后可以显示多列结果. |

Sub myRegx()
Dim myreg As Object
Dim Matches As Object, match As Object
Set myreg = CreateObject("VBScript.regexp")
k = 1
For Each r In Range("a1:a2")
With myreg '正则对象设置
.Pattern = "([\u4e00-\u9fa5]+)(\d*\.?\d*)([\u4e00-\u9fa5|a-z]+)"
.ignorecase = True
.Global = True
Set Matches = .Execute(r)
i = 2
For Each match In Matches '获取匹配结果
For Each subm In match.submatches '获取捕获组 (Capture Group)
Cells(k, i) = subm
i = i + 1
Next
Next
End With
k = k + 1
Next
End Sub
1.6 或者 |
| 字符组 | 解释 |
|---|---|
| | | 分支: |或者的含义 例如: \sa(bc|de)+\s |

2. 贪婪搜索和懒惰搜索
| 转义字符 | 解释 |
|---|---|
| 贪婪搜索 | 选取同时符合要求的最长的一个作为最终结果(默认) |
| 懒惰搜索 | 选取同时符合要求的最短的一个作为最终结果(在"多搜索项字符"后边加一个问号)\d.*?\d |

3. 拓展 230708
3.0 环视(零度断言)
环视,也叫零宽断言
它匹配的是一个位置,该位置必须满足零宽断言条件,才能继续往下进行匹配。
由于位置不是字符,它是没有宽度的,所以叫做零宽断言。
3.1 隐式位置/b
- 如果说字符代表的是
显式位置,那么\b代表隐式位置,- (例如字符’
\ba.+?\b)匹配以a开头的单词⇒涉及到懒惰和精确搜索
- (例如字符’
- 注意和^ $ 的区分(这两个代表的是行开头和行结尾的标志符号)
- 详情参考: 正则表达式 \b==>再研究
3.2 ^ 和 $ 行开头和结尾
- ^代表行开头, 注意[^]的含义
- $代表行结尾 正则表达式
- 详情参考: 正则表达式^与$的用法⇒ 有疑问
3.3 [\u4e00-\u9fa5]+ 中文
- 中文字符的正则表达方式
3.1 ?= ?! 和 ?<! ?<=
- 环视(零宽断言)四种方式
| 通义字符 | 解释 |
|---|---|
?= | 顺序肯定环视 |
?! | 顺序否定环视 |
?<= | 逆序肯定环视 |
?<! | 逆序否定环视 |
否定逆序环视:在这个位置的前边(逆序),不能有(否定)条件给出的字符串
肯定逆序环视:在这个位置的前边(逆序),必须是(肯定)条件给出的字符串
否定顺序环视:在这个位置的后边(顺序),不能有(否定)条件给出的字符串
肯定顺序环视,在这个位置的后边(顺序),必须是(肯定)条件给出的字符串
举例:
1234567890
(?<=\d)(?=(\d\d\d)+\b)
执行结果
123,456,789
3.5 []{}()
- 三种括号分别代表的含义
以上3.1-3.5 均在收藏有,详情参见收藏详细用法
| 字符组 | 解释 |
|---|---|
| []字符组 | 代表一个字符,且必须是方括号里边的字符之一,里边的字符至少出现一次,字符单独出现(里边的字符没有并列关系,不会同时出现) |
| ()分组/捕获组 | 将字符分组作为一个整体;分组后可以显示多列结果.例如: \sa(bc)+\s |
| {n} | 正好出现n次 |
| {n,m} | 出现从n到m次 |
特殊:
[^a^i^o^e^u]”条件表示排除a、i、o、e、u 五个字母也可以通过括号进一步简化代码,即采用“[^(aioeu)]”为条件,仅需要使用一次“^"即可。VBA 不会将“aioeu”看作一个整体,它们之间仍然是并列关系,因为它们处于元字符“[]”之间。
3.6 () Capture Group 捕获组VBA用法
- Matches ⇒ .Execute
- Match⇒ submatches
捕获组分组的集合
619

被折叠的 条评论
为什么被折叠?



