zsh|ifの条件式で正規表現を使用する

Linux
田中太郎
田中太郎

zshの正規表現についてまとめます

はじめに

zshで正規表現を使うことができます

例えば以下のように使用します

str="hoge fuga"
if [[ $str =~ "^hoge" ]] then
    echo "1:Match"
else
    echo "1:Unmatch"
fi

if [[ $str == "^hoge" ]] then
    echo "2:Match"
else
    echo "2:Unmatch"
fi

# 出力
# 1:Match
# 2:Unmatch

「=~」で正規表現が有効になります

1つ目のif文では正規表現が有効なのでmatchしますが

2つ目のif文でが正規表現が無効なのでunmatchと出ます

また、「=~」では左辺(文字列)に右辺(正規表現)が含まれていれば真を返します

よく使う表現

.:任意の文字とマッチする

str="hoge"
if [[ $str =~ "." ]] then
    echo "Match"
fi

+:直前の文字が1回以上続く

*:直前の文字が0回以上続く

?:直前の文字が0 or 1回続く

{n}:直前の文字がn回続く

^:文字列の最初とマッチ

$:文字列の最後とマッチ

\t:タブ

\n:改行

[文字]:括弧内のいずれかの文字とマッチ

str="5"
if [[ $str =~ "[12345]" ]] then
    echo "Match"
fi

上記の例では1 or 2 or 3 or 4 or 5 にマッチしたら真となる

他には以下のように使用する

[0-9]:任意の数字
[a-z]:任意の小文字アルファベット
[A-Z]:任意の大文字アルファベット

[^文字]:括弧内いずれかの文字とマッチしない

str="a"
if [[ $str =~ "[^0-9]" ]] then
    echo "Match"
fi

上記の例では、任意の数字とマッチしなければ真となる

\:直前の正規表現を文字と認識させる

まとめ

zshの正規表現についてまとめました

コメント

タイトルとURLをコピーしました