zsh
中$BASH_REMATCH
的等效项是什么?如何使用?
答案 0 :(得分:2)
或者,人们可以简单地使用
$match[1]
代替
$BASH_REMATCH[1]
答案 1 :(得分:0)
要使zsh
的行为与bash
相同,请使用:
setopt BASH_REMATCH
或在函数内考虑:
setopt local_options BASH_REMATCH
(这只会在功能范围内设置选项)
然后只需像在$BASH_REMATCH
中一样使用bash
。
manual说起BASH_REMATCH
:
设置后,使用=〜运算符执行的匹配将设置BASH_REMATCH数组变量,而不是默认的MATCH和match变量。 BASH_REMATCH数组的第一个元素将包含整个匹配的文本,后续元素将包含提取的子字符串。当还设置了KSH_ARRAYS时,此选项更有意义,以便将整个匹配的部分存储在索引0中,而第一个子字符串存储在索引1中。如果没有此选项,则MATCH变量将包含整个匹配的文本,而match array变量将包含子字符串
然后,=~
的行为类似于bash
,但是如果您想要完整的行为,如manual中所述:
string =〜regexp
如果字符串与正则表达式regexp匹配,则为true。如果设置了选项RE_MATCH_PCRE,则使用zsh / pcre模块将regexp作为PCRE正则表达式进行测试,否则,使用zsh / regex模块将其作为POSIX扩展正则表达式进行测试。成功匹配后,一些变量将被更新;如果匹配失败,则不会更改任何变量。
如果未设置选项BASH_REMATCH,则将标量参数MATCH设置为与模式匹配的子字符串,将整数参数MBEGIN和MEND分别设置为字符串中匹配项的开始和结束的索引,例如字符串包含在变量var中,表达式'$ {var [$ MBEGIN,$ MEND]}'与'$ MATCH'相同。遵循选项KSH_ARRAYS的设置。同样,将数组匹配设置为与带括号的子表达式匹配的子字符串,并将数组mbegin和ment分别修改为字符串中子字符串的开始和结束位置的索引。如果没有带括号的子表达式,则不设置数组。例如,如果字符串“短字符串”与正则表达式“ s(...)t”匹配,则(假设未设置选项KSH_ARRAYS)MATCH,MBEGIN和MEND为“短”,3和7分别是match,mbegin和mend是单输入数组,分别包含字符串'hor','4'和'6'。
如果设置了选项BASH_REMATCH,则将数组BASH_REMATCH设置为与模式匹配的子字符串,然后是与模式中带括号的子表达式匹配的子字符串。