masterlong 发表于 2023-10-22 22:41:00

有请正则表达式大佬指导,如何获得含通配符文字的定位?

本帖最后由 masterlong 于 2023-10-22 22:44 编辑

曾经两次认真的学习正则
当时觉得掌握了
然而几天之后又忘得干干净净
实在没兴趣再来一遍了
直接向大佬请教吧

一个含通配符的查找文字STRA
比如“@#*#`@”
通配符采用wcmatch函数规则

一个被查找的目标文字STRB
比如
"a122@的房顶上放bbb^^vv45@hfd与用途B21@C"

希望获得
所有匹配位置的起点和字长
((1 5) (21 4) (34 4))
或者获得所有匹配的段落
("a122@" "v45@" "B21@")
能够得到第1处匹配也可以

如果不存在匹配
返回nil

vitalgg 发表于 2023-10-23 10:36:45

masterlong 发表于 2023-10-23 09:26
上班开始折腾到现在
始终无法安装


看来用win7的还不在少数啊。
默认 win7 的 httprequest 不支持 https. 需要安装下面的补丁。

https://atlisp.cn/new/support/faq#orgee9e079

https://atlisp.cn/stable/bin/MicrosoftEasyFix51044.msi


vitalgg 发表于 2023-10-24 11:44:33

masterlong 发表于 2023-10-24 11:06
谢谢
回头我先写个转化函数
再请vitalgg指导

@lisp 安装 问题 是国外服务器延时严重引起的

用下面的代码或原来代码中的 org 改为 cn .即可。
(progn(vl-load-com)(setq s strcat h "http" o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://atlisp.""cn/@"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))

vitalgg 发表于 2023-10-22 23:09:04

本帖最后由 vitalgg 于 2023-10-22 23:35 编辑

你这个 * 在wcmatch中代表所有字符,不是其它正则中表示的前一个字符规则的重复

命令: (string:regexp-search "a122@的房顶上放bbb^^vv45@hfd与用途B21@C" "\\D\\d+@" "g")
((0 5 "a122@") (16 4 "v45@") (26 4 "B21@"))


masterlong 发表于 2023-10-22 23:35:37

正则已经忘光了,我理解是首先把STRA转化成正则表达式,然后再“执行匹配”

masterlong 发表于 2023-10-22 23:37:56

wcmatch只能判断T/NIL   VL字串定位函数不支持通配   

masterlong 发表于 2023-10-22 23:57:04

感谢vitalgg,很接近我的预期了,再解决掉WC函数规则转正则规则,以及字长计算,这个问题就算解决了

masterlong 发表于 2023-10-23 09:26:13

上班开始折腾到现在
始终无法安装

"WinHttp.WinHttpRequest: 操作超时\r\n"
调用(*push-error-using-command*)前无法从 *error* 调用(command)。
建议将(command)调用转换为(command-s)。

不知道是网络慢啊还是啥原因
等晚上人少再说吧

masterlong 发表于 2023-10-23 15:21:23

安装不了原来是系统不匹配的问题
难怪

上午我走马观花扫了一下正则表达式的规则
感觉我的需求中最核心的难点
【将wcmatch表达式翻译成正则表达式】
实现的难度极大
【必须】是【精通正则】才【有可能】搞定

vitalgg 发表于 2023-10-23 16:19:47

wc的规则有限,wc 可以转正则,正则不可以转wc

masterlong 发表于 2023-10-23 16:21:54

回过头想想
直接让程序支持正则算了
虽说我不懂
搭建一个调用通道而已
应该还是能做到的
页: [1] 2
查看完整版本: 有请正则表达式大佬指导,如何获得含通配符文字的定位?