明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1762|回复: 3

[已解答] lisp如何检查正则表达式的语法错误?

[复制链接]
发表于 2013-7-22 23:12 | 显示全部楼层 |阅读模式
本帖最后由 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)
)
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2013-7-22 23:34 | 显示全部楼层
本帖最后由 yxp 于 2013-7-23 00:07 编辑

问题解决:
(defun sFind(Source Regex Key / vbRegEx sLt ss err)
  (setq vbRegEx (vlax-create-object "Vbscript.RegExp")) ;;创建正则表达式的Active对象引用
  (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")) ;;p参数为返回位置
  (vlax-put-property vbRegEx "Pattern" Regex)
  (setq err (vl-catch-all-apply 'vlax-invoke (list vbRegEx 'Execute Source)))
  (cond ((null (vl-catch-all-error-p err))
          (vlax-for obj err (setq sLt (cons (vlax-get-property obj ss) sLt)))
          (vlax-release-object vbRegEx)
          (reverse sLt)
        )
        (t (princ "正则表达式错误")(princ))
  )
)
 楼主| 发表于 2013-7-23 16:48 | 显示全部楼层
在明经中下载的《正则表达式经典实例. (美)高瓦特斯 ...》.pdf 中说
正则表达式的流派 .NET、Java、JavaScript、PCRE、Perl、Python、Ruby

Vbscript.RegExp  是VB家族的应该属于 .net 流派吧,但是书中的实例几乎大部分都无法使用...有试过的吗?
发表于 2018-5-12 20:29 来自手机 | 显示全部楼层
学习学习院长的高招
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 16:28 , Processed in 0.408662 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表