代码之家  ›  专栏  ›  技术社区  ›  Tom Hale

什么是zsh等价的$bash_rematch[]?

zsh
  •  0
  • Tom Hale  · 技术社区  · 6 年前

    什么是等效的 zsh 对于 $BASH_REMATCH ,如何使用?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tom Hale    6 年前

    使 zsh 行为举止与 bash 使用:

    setopt BASH_REMATCH
    

    或者在一个函数中考虑:

    setopt local_options BASH_REMATCH
    

    (这只会在函数范围内设置选项)

    那就用 $BASH_REMATCH 就像你在里面一样 猛击 .


    这个 manual 说关于 BASH_REMATCH :

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

    然后 =~ 会表现得像 猛击 ,但如果您想要 manual :

    字符串=~regexp

    如果字符串与正则表达式regexp匹配,则为true。如果选项re_match_pcre设置为regexp,则使用zsh/pcre模块将其测试为pcre正则表达式,否则使用zsh/regex模块将其测试为posix扩展正则表达式。成功匹配后,将更新某些变量;如果匹配失败,则不更改任何变量。

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

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