Regular-Expression

ZSH 萬用字元表達式限制重複支持?

  • November 24, 2016

有誰知道是否有辦法將重複約束合併到 ZSH 萬用字元表達式中?

例如,要匹配所有以“ABC”開頭併後跟一個或多個數字的文件,使用 grep one 可以:

ls | grep -e "ABC[0-9]\+"

有沒有辦法直接用 ZSH glob 字元串來做到這一點?類似於以下內容:

ls "ABC[0-9]\+"

我已經查看了 ZSH 的文件並在 Google 上搜尋過類似的內容,但到目前為止還沒有找到任何此類支持。

有誰知道這是否可能?

是的,用於##匹配一個或多個[0-9]類似的出現:

ABC[0-9]##

這需要extendedglob設置,預設情況下。如果未設置,請先設置:

setopt extendedglob

例子:

% print -l ABC*
ABC
ABC75475
ABC8
ABC90

% print -l ABC[0-9]##
ABC75475
ABC8
ABC90

啟用extendedglob

$ setopt extendedglob
$ print -rl -- perl[[:digit:]]##
perl5

kshglob啟用和bareglobqual禁用:

$ setopt kshglob
$ unsetopt bareglobqual
$ print -rl -- perl+([[:digit:]])
perl5

請注意,[:digit:]用於匹配目前語言環境中被視為數字的所有內容。如果您只想匹配,請設置或使用字面0意思。9``LC_ALL=C``[0123456789]


您可以指定匹配的數量,例如在可以使用和運算符的任何地方{n,m}使用(#cN,M)萬用字元的正則表達式,除了and :#``##``(*/)#``(*/)##

$ print -rl -- perl[[:digit:]](#c1)
perl5
$ print -rl -- perl[[:digit:]](#c2)
zsh: no matches found: perl[[:digit:]](#c2)

引用自:https://unix.stackexchange.com/questions/325445