- 积分
- 15552
- 明经币
- 个
- 注册时间
- 2004-3-7
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 yxp 于 2013-7-22 23:15 编辑
当正则表达式为一个元字符 "*" 时,文本搜索产生一个 “错误,发生意外。”
程序在设计过程中是可测试并避免的,
但在使用过程中,由用户输入的错误表达式,将导致程序非正常退出,
用 *error* 无法返回这个错误。
例如: (sFind "abcdef" "*" "gp")
(defun sFind(Source Regex Key / vbRegEx sLt ss *error*)
(defun *error* (msg)(princ msg)) ;;正则表达式的语法出错好像无法捕获
(setq vbRegEx (vlax-create-object "Vbscript.RegExp")) ;;创建正则表达式引用
(foreach x '(("Global" . "*g*,*G*") ;;设置全文检索还是只检索出现的第一处,0为只检查第一处,1为全文检索
("IgnoreCase" . "*i*,*I*") ;;忽略大小写,0为区分大小写,1为忽略大小写
("Multiline" . "*m*,*M*")) ;;多行模式 单行模式 "Singleline" 好像不顶用
(vlax-put-property vbRegEx (car x) (if (and Key (wcmatch Key (cdr x))) 1 0))
)
(setq ss (if (and Key (wcmatch Key "*p*,*P*")) "FirstIndex" "value")) ;;key中含参数p为返回查找位置
(vlax-put-property vbRegEx "Pattern" Regex)
(vlax-for obj (vlax-invoke vbRegEx 'Execute Source)
(setq sLt (cons (vlax-get-property obj ss) sLt)))
(vlax-release-object vbRegEx)
(reverse sLt)
)
|
|