Regular-Expression
ZSH 萬用字元表達式限制重複支持?
有誰知道是否有辦法將重複約束合併到 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)