Like 运算符 (Visual Basic)

将字符串与模式相比较。

重要

.Net Core 和 .NET Standard 项目目前不支持 Like 运算符。

语法

result = string Like pattern  

组成部分

result
必需。 任何 Boolean 变量。 结果为一个 Boolean 值,指示 string 是否满足 pattern

string
必需。 任何 String 表达式。

pattern
必需。 任何符合“Remarks”中所述的模式匹配约定的 String 表达式。

注解

如果 string 中的值满足 pattern 中包含的模式的要求,则 result 的结果为 True。 如果字符串不满足模式的要求,则 result 的结果为 False。 如果 stringpattern 均为空字符串,则结果为 True

比较方法

Like 运算符的行为取决于 选项比较语句。 每个源文件的默认字符串比较方法为 Option Compare Binary

模式选项

内置模式匹配为字符串比较提供了多种工具。 模式匹配功能可将 string 中的每个字符与特定字符、通配符、字符列表或字符范围相匹配。 下表显示了 pattern 中允许的字符以及它们匹配的内容。

pattern 中的字符 string 中的匹配项
? 任何单个字符
* 零个或多个字符。
# 任何单个数字 (0 – 9)
[charlist] charlist 中的任何单个字符
[!charlist] charlist 中的任何单个字符

字符列表

括在括号([ ])内的一个或多个字符组(charlist)可用于匹配 string 中的任何单个字符,并可包括几乎所有字符代码(包括数字)。

charlist 开始时的感叹号(!)表示在 string 中找到除 charlist 中的字符以外的任何字符时进行匹配。 当在括号外使用时,感叹号与自身匹配。

特殊字符

若要匹配特殊字符左括号([)、问号(?)、数字符号(#)和星号(*),请将它们括在括号中。 不能在组内使用右括号(]),而是可以将其作为单个字符在组外使用。

字符序列 [] 被视为长度为零的字符串("")。 但是,它不能是括在括号中的字符列表的一部分。 如果要检查中 string 的某个位置是否包含一组字符中的某个字符或不包含任何字符,可以使用 Like 两次。 有关示例,请参阅 如何:将字符串与模式匹配

字符范围

通过使用连字符()来分隔范围的下限和上限,charlist 可以指定字符范围。 例如,如果 string 中的相应字符位置包含范围 AZ 内的任何字符,则 [A–Z] 会导致匹配;如果相应的字符位置包含范围 HL 之外的任何字符,则 [!H–L] 会导致匹配。

指定字符范围时,它们必须按升序排序,即从最低到最高。 因此,[A–Z] 是有效的模式,但 [Z–A] 不是。

多字符范围

若要为同一字符位置指定多个范围,请将它们放在不带分隔符的相同括号中。 例如,如果中 string 的相应字符位置包含范围 AC 或范围 XZ 内的任何字符,则 [A–CX–Z] 会导致匹配。

连字符的用法

连字符()可以出现在 charlist 的开头 (感叹号的后面,如有的话) 或末尾。 在其他任何位置,连字符标识由连字符两侧的字符分隔的一系列字符。

排序顺序

指定范围的含义取决于运行时的字符排序,由 Option Compare 和运行代码的系统的区域设置确定。 使用 Option Compare Binary,范围 [A–E] 匹配 ABCDE。 使用 Option Compare Text[A–E] 匹配 AaÀàBbCcDdEe。 该范围不匹配 Êê,因为在排序顺序中重音字符排在非重音字符之后。

连字符

在某些语言中,有表示两个不同字符的字母字符。 例如,当字符一起显示时,一些语言使用字符 æ 来表示字符 aeLike 运算符识别单个连字符和两个单个字符是否等效。

如果在系统区域设置中指定了使用连字符的语言,则 patternstring 中的单个连字符的出现位置与另一个字符串中的等效双字符序列匹配。 同样,括在括号中的 pattern 中的连字符(自身、列表或范围中)与 string 中的等效双字符序列匹配。

重载

可重载 Like 运算符,这意味着当操作数具有某一类或结构时,该类或结构可重新定义其行为。 如果你的代码在这种类或结构上使用此运算符,请确保了解其重新定义的行为。 有关详细信息,请参阅 Operator Procedures

示例

此示例使用 Like 运算符将字符串与各种模式进行比较。 结果将进入 Boolean 变量,该变量指示每个字符串是否满足此模式。

Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary
'    and True for Option Compare Text (does "F" satisfy "f"?)
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the
'    beginning, an "a" at the end, and any number of characters in 
'    between?)
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of
'    characters from "A" through "Z"?)
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the 
'    set of characters from "A" through "Z"?)
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with
'    an "a" and have any single-digit number in between?)
testCheck = "a2a" Like "a#a"
' The following statement returns True (does "aM5b" begin with an "a",
'    followed by any character from the set "L" through "P", followed
'    by any single-digit number, and end with any character NOT in
'    the character set "c" through "e"?)
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a
'    "B", followed by any single character, followed by a "T", and end
'    with zero or more characters of any type?)
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg"?) begin with
'    a "B", followed by any single character, followed by a "T", and
'    end with zero or more characters of any type?)
testCheck = "CAT123khg" Like "B?T*"

另请参阅