$BASH_REMATCH的zsh中的等价物是什么?它是如何使用的?
发布于 2018-10-28 17:53:02
要使zsh的行为与bash相同,请使用:
setopt BASH_REMATCH或者在函数中考虑:
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将设置为与模式匹配的子字符串,后跟与模式中带括号的子表达式匹配的子字符串。
发布于 2020-07-24 01:47:34
或者,可以简单地使用
$match[1]代替
$BASH_REMATCH[1]https://stackoverflow.com/questions/53030233
复制相似问题