首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$BASH_REMATCH[]的zsh等价物是什么?

$BASH_REMATCH[]的zsh等价物是什么?
EN

Stack Overflow用户
提问于 2018-10-28 17:53:02
回答 2查看 2.3K关注 0票数 6

$BASH_REMATCHzsh中的等价物是什么?它是如何使用的?

EN

回答 2

Stack Overflow用户

发布于 2018-10-28 17:53:02

要使zsh的行为与bash相同,请使用:

代码语言:javascript
复制
setopt BASH_REMATCH

或者在函数中考虑:

代码语言:javascript
复制
setopt local_options BASH_REMATCH

(这将仅在函数范围内设置选项)

然后像在bash中一样使用$BASH_REMATCH

manual谈到了BASH_REMATCH

设置后,使用=~运算符执行的匹配将设置BASH_REMATCH数组变量,而不是默认的MATCH和match变量。BASH_REMATCH数组的第一个元素将包含整个匹配的文本,后续元素将包含提取的子字符串。如果还设置了KSH_ARRAYS,以便将整个匹配部分存储在索引0处,而第一个子字符串存储在索引1处,则此选项更有意义。如果不设置此选项,则MATCH变量包含整个匹配文本,match数组变量包含子字符串。

然后,=~的行为将与bash中的行为类似,但如果您想要manual中描述的完整行为

字符串=~ regexp

如果string与正则表达式regexp匹配,则为true。如果设置了选项RE_MATCH_PCRE,则使用zsh/pcre模块将其作为PCRE正则表达式进行测试,否则使用zsh/regex模块将其作为POSIX扩展正则表达式进行测试。匹配成功后,会更新一些变量;如果匹配失败,则不会更改任何变量。

如果未设置选项BASH_REMATCH,则将标量参数MATCH设置为与模式匹配的子字符串,并将整数参数MBEGIN和MEND分别设置为字符串中匹配的开始和结束的索引,这样,如果字符串包含在变量var中,则表达式‘${var$MBEGIN,$MEND}’与‘$ match’相同。将遵循选项KSH_ARRAYS的设置。同样,将数组匹配设置为与带括号的子表达式匹配的子字符串,将数组mbegin和mend设置为字符串中子字符串的开始和结束位置的索引。如果没有带括号的子表达式,则不设置数组。例如,如果字符串‘a short string’与正则表达式‘s(...)t’匹配,则(假设未设置选项KSH_ARRAYS ) match、mbegin和MEND分别为‘short’、3和7,而MATCH、MBEGIN和mend是分别包含字符串‘hor’、‘4’和‘6’的单条目数组。

如果设置了选项BASH_REMATCH,则数组BASH_REMATCH将设置为与模式匹配的子字符串,后跟与模式中带括号的子表达式匹配的子字符串。

票数 9
EN

Stack Overflow用户

发布于 2020-07-24 01:47:34

或者,可以简单地使用

代码语言:javascript
复制
$match[1]

代替

代码语言:javascript
复制
$BASH_REMATCH[1]
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53030233

复制
相关文章

相似问题

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