马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
AutoLISP 中的 wcmatch 函数与 pattern 详解
wcmatch 是 AutoLISP 中用于字符串模式匹配的函数,类似于其他编程语言中的正则表达式,但语法更简单。它使用 通配符(wild-card characters) 来定义匹配规则。
1. wcmatch 函数的基本语法
(wcmatch "str" "pattern")
2. 通配符(Wild-card Characters)
通配符 | 含义 | 示例 | 匹配示例 | # | 匹配 任意一个数字(0-9) | "A##" | "A12"(匹配),"AB3"(不匹配) | @ | 匹配 任意一个字母(A-Z, a-z) | "A@@" | "ABc"(匹配),"A12"(不匹配) | . | 匹配 任意一个非字母数字字符 | "A.3" | "A#3"(匹配),"AA3"(不匹配) | * | 匹配 任意长度的字符(包括空字符串) | "A*" | "A", "ABC", "A123"(均匹配) | ? | 匹配 任意一个字符 | "A?C" | "ABC", "A1C"(匹配),"AC"(不匹配) | ~ | 否定匹配(必须放在模式开头) | "~A*" | 匹配 不以 A 开头 的字符串 | [abc] | 匹配 括号内的任意一个字符 | "[ABC]1" | "A1", "B1", "C1"(匹配) | [~abc] | 匹配 不在括号内的任意一个字符 | "[~ABC]1" | "D1"(匹配),"A1"(不匹配) | [a-z] | 匹配 范围内的任意一个字符 | "[A-Z]1" | "A1", "B1"(匹配),"a1"(不匹配) | , | 多个模式组合(逻辑“或”) | "A*,B*" | "ABC"(匹配 A*),"BCD"(匹配 B*) | ` | 转义字符(取消通配符的特殊含义) | "*\*"` | 匹配包含 \ 的字符串 |
3. 关键注意事项(1) 转义特殊字符
(2) 范围匹配 [a-z](3) ~ 必须放在模式开头
(wcmatch "ABC" "~A*") ; 匹配 **不以 A 开头** 的字符串(wcmatch "XYZ" "~A*") ; 返回 T(wcmatch "ABC" "~A*") ; 返回 nil
(4) 多个模式用 , 分隔
(wcmatch "ABC" "A*,B*") ; 匹配以 A 或 B 开头的字符串(wcmatch "BCD" "A*,B*") ; 匹配,因为符合 B*
4. 经典示例
示例 | 含义 | 匹配情况 | (wcmatch "ABC" "A*") | 匹配以 A 开头的字符串 | "ABC", "A123"(匹配) | (wcmatch "123" "#*") | 匹配以数字开头的字符串 | "123", "1A"(匹配) | (wcmatch "A1B" "A?B") | 匹配 A + 任意字符 + B | "A1B", "AXB"(匹配) | (wcmatch "A,B" "A,B")` | 匹配 A,B(逗号被转义) | "A,B"(匹配) | (wcmatch "STR1" "STR[1-3]") | 匹配 STR1, STR2, STR3 | "STR1"(匹配) | (wcmatch "XYZ" "[~ABC]*") | 匹配 不以 A/B/C 开头 的字符串 | "XYZ"(匹配) |
5. 总结wcmatch 是 AutoLISP 中强大的字符串匹配函数,适用于文件名、图层名等筛选。 通配符:
转义字符 ` 用于匹配特殊符号(如 *, ?, ,, \)。 范围匹配 [a-z] 只能匹配 单个字符。 多个模式用 , 分隔,实现“或”逻辑。
掌握 wcmatch 可以极大提高 AutoLISP 字符串处理的灵活性!
|