;;;teather:nonsmall opendcl
;;;version(版本):1.0
;;;description(描述):应用正则表达式,从字符处中查找邮箱地址
;;;示例: 1.加载程序
;;; 2.cad命令行输入:(setq str "dssd f bvd1@126.com 2@qq.com sss a 21@sina.cn,www dds 111111@yeah.net")
;;; 3.cad命令行输入:(tt str)
;;; cad命令行输出数据:
;;; 邮箱地址:bvd1@126.com
;;; 邮箱地址:2@qq.com
;;; 邮箱地址:21@sina.cn
;;; 邮箱地址:111111@yeah.net
;;; 替换:dssd f 邮箱替换 邮箱替换 sss a 邮箱替换,www dds 邮箱替换
(defun tt(str/)
(vl-load-com) '加载vl
(setq reg (vlax-create-object "vbscript.regexp")) '创建正则表达式
;;; 正则表达式属性: global Multiline IgnoreCase pattern 其中pattern是灵魂-----------------
;;; 1.写正则表达式
;;; 2.百度搜索正则表达式,就可以了解pattern写法。
(vlax-put-property reg 'global -1) '是否匹配全部 (-1是 ,0 不是)
(vlax-put-property reg 'Multiline -1)'是否多行匹配 (-1是 ,0 不是)
(vlax-put-property reg 'IgnoreCase -1)'是否忽略大小写 (-1是 ,0 不是)
(vlax-put-property reg 'pattern (strcat "\\w{1,}" "@" "\\w{1,}" "." "((cn)|(com)|(net))"));lisp \\
;;; ----------------- end 正则表达式属性
;;; 正则表达式方法: test Execute IgnoreCase pattern 其中pattern是灵魂-----------------
;;; 1.(vlax-invoke-method reg 'test str)判断字符串是否与正则表达式匹配
(if (vlax-invoke-method reg 'test str)
;;; 2.(vlax-invoke-method reg 'Execute str)生成匹配集合
(progn (setq matchcollect (vlax-invoke-method reg 'Execute str))
;;; 3.打印匹配的每个集合元素的value
(vlax-for match_item matchcollect (princ (strcat "\n" "邮箱地址:" (eval (vlax-get-property match_item 'value)))))
)
(princ "no email")
)
;;; 4.替换匹配的值 (vlax-invoke-method reg 'Replace str "replace") 生成str副本
(princ (strcat "\n" "替换:" (vlax-invoke-method reg 'Replace str "邮箱替换")))
;;; ----------------- end 正则表达式方法
(vlax-release-object reg);释放内存
(prin1)
)