VBA LIKE operator 实际上是一个非常强大的操作符,它的功能强大程度在普通字符串比较和正则表达式之间,它不是正则表达式,但支持一部分正则表达式语法和特性,可以说是低配置版本的正则表达式。
VBA LIKE 操作符执行的是完整匹配,而不是部分匹配,而且区分大小写,它的语法是其中 A 是被测试的字符串,B 是用来测试字符串的表达式。
VBA LIKE 表达式需要使用引号包裹。可以使用这些语法。
? 匹配任何一个字符,如果要匹配 ? 本身,需要将它放在 [] 内;
* 匹配 0 个或更多的单个字符,[]* 并不像正则表达式一样表示重复 [] 匹配到的字符,而是表示 [] 匹配到的单一字符后面有或者没有其它内容,如果要匹配 * 本身,需要将它放在 [] 内;
# 匹配任何一个 0 到 9 之间的数字,如果要匹配 # 本身,需要将它放在 [] 内,# 是 [0-9] 的简便写法。
[<list>] [!<list>] 分别表示匹配任何一个列出来的字符和匹配不是任何一个列出来的字符的字符,<list> 是字符列表,可以使用 <start>-<end> 表示一个范围内的任意字符,也可以直接写出字符,也可以是范围和多个字符的组合,其中 <start> 是指开始字符,<end> 是指结束字符,如果要匹配 [ 本身,可以将它放进 [] 内,] 不能放在 [] 内,但可以放在 [] 外。! 不是 [] 内第一个字符时可以匹配它自己,此时它没有特殊意义,- 如果是 [] 内第一个字符,或是 [] 第一个字符 ! 后面的第一个字符,或者是 [] 内最后一个字符时,它表示 - 本身,此时它没有特殊意义。
[0-9] 任何一个数字,起止字符可以是这个范围内的其他值,比如 [3-5],其他表示范围的范式同理;
[a-z] 任何一个英文小写字母;
[A-Z] 任何一个英文大写字母;
[a-zA-Z] 任何一个英文字母;
[一-龥] 任何一个汉字,仅限 \u4e00 - \u9fa5 即“一”到“龥”之间的汉字,其中 4e00 和 9fa5 是十六进制数;
[ -~] ASCII 码表中从空格到~的任何一个字符,可以修改起止字符,不可见字符可以使用 Chr() 生成;
"[" & Chr(0) & "-" & Chr(127) & "]" ASCII 码表中的任何一个字符,修改 0 或 127 可以实现指定范围内的字符匹配;
"[" & ChrW(CDec("&H4e00")) & "-" & ChrW(CDec("&H9fa5")) & "]" 等效于 [一-龥],其中的 &H 是十六进制数前缀,使用这个语法可以变相实现以码点范围指定字符范围;
[0-9a-zA-Z一-龥] 组合式,任何一个数字、字母或如上所述的汉字;
[3-5p-w[?*#\/] 组合式,3-5 p-w 或特殊符号 ? * # \ / 中的任何一个字符;
[!a-z] 不能是 a-z 之间的任何字母,其他字符都匹配。
字符范围只能升序表示,像 [z-a] 这样颠倒顺序的表达式会触发错误。
- Debug.Print "吴先成" Like "*[成功]*"
复制代码 以上代码返回 True。注意表达式中首尾的 * ,如果没有首尾的 *,只有待测试字符串是一个字符,并且是“成”或“功”时才会测试成功。
如果要匹配 ] 需要再写一个 LIKE 语句- Dim s As String
- s = "吴先成]"
- Debug.Print s Like "*[\/[?*]*" Or s Like "*]*"
复制代码 以上代码测试待测试字符串是否包含特殊字符 \ / [ ? * ] |
|