明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 482|回复: 0

请教一下前辈们,这个vlax对象怎么取得

[复制链接]
发表于 2019-5-11 16:36 | 显示全部楼层 |阅读模式
本帖最后由 CAD新军 于 2019-5-11 17:06 编辑
  1. _$ (vlax-dump-object matches)
  2. ; IMatches: nil
  3. ;特性值:
  4. ;   Count (RO) = 4
  5. ;   Item (RO) = ...不显示带索引的内容...
  6. ;   _NewEnum (RO) = #<IUnknown 000000004dda9ca0>
  7. T
  8. _$
复制代码
我现在在编的一个小脚本,大量代码需要用到正则表达式,网上找了几个vbs实现的,用着都发现有些小问题,想改进一下时,第一次碰vlax对象,遇到了问题.

一个正则返回对象 matches在VBS中时这样一个Array : [ Matches(0) Matches(1) .... Matches (n) ]
而每个Matches(n) 也是一个Array ,形如 [ FirstIndex Value Submatches ]

VBS里面就直接 Matches(3) 就能取到第4个。而我找到的函数都是用 (vlax-for m matches (vlax-get m 'Value)) 来取得各个值的,我想问有没有类似(nth n list)的方法,直接取得某个Array里面的值呢?

我其实用的是Submatches数组里面的值,但问题是 vlax-for 遍历 submatches时,遇到空的数组会直接出错终止循环。比如这个正则表达式:
(1)(a)?(2)?
当匹配 1a2时, 三个捕获都会得到, 1,a,2
但匹配 12时,因为第二个捕获没有命中,只会返回 1,而无视后面的捕获,这就出问题了



精简出来的复现代码:
  1. (defun RegExpSet (pattern / regex)
  2.   (setq regex   (vlax-create-object "VBScript.RegExp")  )
  3.     (vlax-put regex 'Pattern pattern)
  4.     (vlax-put regex 'IgnoreCase acTrue)
  5.     (vlax-put regex 'Global acTrue)
  6.   regex
  7. )

  8. (setq slist nil
  9.          str "13"); ############这里改成"1a3"就会正常不出错误
  10. (setq ms (vlax-invoke (RegExpSet "([0-9])([abc])?([0-9])?" ) 'Execute str))
  11. (vlax-for m ms (setq jj m))
  12. ; 这句其实就是标题的问题,我只想要ms(0),因为不会直接读取 ms(0)只好用vlax-for
  13. ;这里组里只有一个值,用vlax-for的办法读出来,记成 jj, 现在jj 相当于 Matches(0)
  14. (setq sub (vlax-get jj 'SubMatches))
  15. ; sub 就相当于 Matches(0).SubMatches, 这也是一个Array,包含所有捕获字符串分组
  16. (vlax-for s sub (setq slist (cons s slist)))
  17. ; 获得每个submatches的值,合并到slist 表中
  18. ;同理这也是标题中的问题,我只想要某一段捕获比如submatches(2),但又只好用vlax-for

  19. ;;直接粘贴的话,运行到上面一句会出错...str改成1a3就能整体完成

  20. (princ slist);可以看到用"13"去匹配,会先是1然后就没有了,如果用"1a3"去匹配会正确返回1 a 3
  21. (vlax-dump-object sub);这里就是开头的情况了




您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 23:04 , Processed in 1.451945 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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