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
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 捕获组分组的集合