首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >emacs中"replace-match“函数中的”subexpression“是如何工作的?

emacs中"replace-match“函数中的”subexpression“是如何工作的?
EN

Stack Overflow用户
提问于 2012-07-22 23:49:39
回答 2查看 692关注 0票数 4

在Emacs中阅读"replace-match“函数的描述时,我无法理解”subexpression“属性是什么以及应该如何使用它?例如在(replace-match (format-time-string writestamp-format (current-time)) t t nil 1)中,“1”是什么意思?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-23 00:03:41

来自the manual

如果subexp不为nil,则表示只替换匹配的正则表达式的子表达式编号subexp,而不是整个匹配。例如,在匹配‘foo(ba*r)’之后,调用replace-match with 1作为subexp意味着只替换匹配‘(ba*r)’的文本。

您需要首先了解正则表达式的子表达式,以了解此功能:通过用大括号分隔正则表达式的一部分,您可以对其进行分组,然后访问这些组。如果您想在执行query-replace-regex时在替换文本中重用匹配的部分,这是非常有用的。这就是它在这里的工作方式。

想象一下,您想用foo(SOMETHING)替换所有出现的bar(SOMETHING)。所以首先匹配bar(\([^)]*\)) (这意味着除了)之外的所有字符都可以放在括号内,并且我们的第一个子表达式是\(\)之间匹配的所有内容。

票数 3
EN

Stack Overflow用户

发布于 2012-07-23 00:03:30

我在谷歌上搜索了“emacs子表达式”,first hit对此进行了解释:

回想一下,正则表达式的子表达式是那些使用转义括号‘(...)’分组的表达式。countth子表达式是通过从整个正则表达式的开头开始计算‘(’的出现次数来找到的。第一个子表达式编号为1,第二个子表达式编号为2,依此类推。

例如,如果执行正则表达式搜索\([a-z]+\) \([0-9]+\),则第一个子表达式包含[a-z]+部件,第二个子表达式包含[0-9]+部件。

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

https://stackoverflow.com/questions/11601690

复制
相关文章

相似问题

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