首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用普通lisp提取正则匹配

用普通lisp提取正则匹配
EN

Stack Overflow用户
提问于 2014-06-23 03:34:07
回答 1查看 1.7K关注 0票数 3

我一定是错过了一些非常基本的东西。

我需要从一个普通的lisp的匹配中提取一个捕获组。当我在解释器( sbcl实现)中评估时:

代码语言:javascript
复制
`(cl-ppcre::scan-to-strings ".*?(\\d).png" "sample1.png")`

我得到:

代码语言:javascript
复制
"sample1.png"
#("1")

但是如果我将这个表达式绑定到一个值,比如说

代码语言:javascript
复制
`(setq number (cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))`

数字的值变成"sample1.png"。如何获得已打印的"1"

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-23 04:11:30

你的问题

你在找

代码语言:javascript
复制
(setf (values match position) 
      (cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))

另见multiple-value-bind等人。

在引擎盖下面

常用的lisp函数可以返回多重值。这对应于其他语言(如Python )中的"tuple“返回值。因此,当lisp函数(如floor )返回多个值时,Python用户将编写如下

代码语言:javascript
复制
(f,r) = floor(10,3)

floor将(通常)分配一个元组,在编写fr = floor(10,3)时捕获这个元组。

CL多个值不会分配额外的存储空间,但除非您特别要求额外的值,否则额外的值将被丢弃:

代码语言:javascript
复制
(setf (values f r) (floor 10 3))

将捕获这两个值,但(setf f (floor 10 3))将放弃r

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24358075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档