将模式字符串与某指定的字符串进行匹配比较
(wcmatch string pattern)
参数
string
要比较的字符串。比较是区分大小写的,所以必须严格匹配大小写字符。
pattern
模式字符串,包含与 string 进行匹配的模式。pattern 可以包含表通配符中所列的通配符。在多个模式条件之间用逗号 (,) 分隔。函数仅比较 string 和 pattern 的前 500 个字符(约数),后面的字符将被省略。
这两个参数既可以是由双引号引起来的字符串,也可以是变量。可以使用其他 明经通道 AutoLISP 函数返回的变量和值作为 string 和 pattern 的值。
返回值
如果 string 和 pattern 匹配,wcmatch 返回 T,否则 wcmatch 返回 nil。
通配符 |
|
---|---|
通配符 |
定义 |
# (磅值符号) |
匹配任意单个数值字符 |
@ (at) |
匹配任意单个字母字符 |
. (句号) |
匹配任意单个非字母数值字符 |
* (星号) |
匹配任意字符序列,包括空字符串,它可以出现在任何位置,包括开头、中间和结尾处 |
? (问号) |
匹配任意单个字符 |
~ (波浪号) |
如果它是模式字符串的第一个字符,则匹配除此字符串之外的任意字符串 |
[...] |
匹配括号中的任意一个字符 |
[~...] |
匹配不在括号中的任意单个字符 |
– (连字符) |
用在括号里面,用来指明单个字符的取值范围 |
, (逗点) |
分隔两个模式字符串 |
` (单引号) |
特殊转义字符(按字义读取随后的字符) |
示例
该例子测试字符串 "Name" 是否以字符 N 开头:
命令: (wcmatch "Name" "N*")
T
下例进行三个比较。只要字符串匹配三个模式字符串中的任何一个,wcmatch 返回 T。在本例中进行的测试有:
如果满足其中至少一个条件,则 wcmatch 返回 T:
命令: (wcmatch "Name" "???,~*m*,N*")
T
本例中满足最后一个条件,所以 wcmatch 返回 T。
在 wcmatch 中使用转义字符
要测试一个字符串中的通配符,可以使用单个单引号 (`) 来转义字符。转义是指跟在单个单引号后面的字符不当作通配符读取,而是按其表面值进行比较。例如,为了测试在字符串 Name 中是否包含逗号,可以使用如下表达式:
命令: (wcmatch "Name" "*`,*")
nil
由于 C 和 AutoLISP 程序设计语言都使用反斜杠 (\) 作为转义字符,所以在字符串中必须使用两个反斜杠 (\\) 才能表示一个反斜杠。为了测试字符串 Name 中是否包含一个反斜杠,可以使用如下表达式:
命令: (wcmatch "Name" "*`\\*")
nil
所有包含在括号 ([ . . . ]) 中的字符都按字义读取,所以不必使用转义字符。但有如下例外:只有当波浪线字符 (~) 不是括号里的第一个字符(如 [A~BC])时才按字义读取;否则作为一个“非”字符读取它,这意味着 wcmatch 函数将匹配跟随在波浪号之后那些字符(如 [~ABC])之外的所有字符。而连字符 (-) 则只有当它是括号中的第一个字符或最后一个字符(如 [-ABC] 或 [ABC-]),或者它跟在前导的波浪号后面时,才按字义读取。否则,在括号中的连字符用于指定某特定字符的取值范围。该范围仅限于单个字符,所以,STR[1-38] 与 STR1、STR2、STR3 和 STR8 匹配,而 [A-Z] 与任意单个大写字母匹配。
如果闭括号 ("]") 是括号内的首个字符或跟随在波浪号之后(如 [ ]ABC] 或 [~]ABC]),它将被按字义读取。
注意 由于 AutoLISP 的后续版本中可能会加入其他的通配符,所以建议在样本中给所有非字母数值字符加上转义字符转义,以确保它的向上兼容性。
明经通道 版权所有 未经许可 不得传播 | 评论 |