この表現パターンは何を'^[0-9]+$'
確認しますか?
#!/usr/bin/env bash
if [[ $VAR =~ '^[0-9]+$' ]]; then
execute code
fi
答え1
正規表現は、^[0-9]+$
連続した数字で構成された空でない文字列、つまり数字のみで構成される空でない行と一致します。 3.2以降でその正規表現を使用するには、引用符なしでそのままにしてください。つまり、コード[[ ... =~ there ]]
スニペットは次のようになります。bash
^[0-9]+$
'^[0-9]+$'
#!/usr/bin/env bash
if [[ "${VAR}" =~ ^[0-9]+$ ]]; then
#execute code
fi
答え2
正規表現は、最初(^)から終わり($)までの1つ以上の(+)数字[0-9]と一致する場合、VARの内容と一致します。行には、両端の[0-9] + ^と$と一致する数字のみを含める必要があります。
さまざまな入力に対して正規表現をテストするプログラム
$ cat flub
#!/usr/bin/bash
for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
echo -n "Testing $VAR : "
if [[ "$VAR" =~ ^[0-9]+$ ]]; then
echo "$VAR" matches
else
echo
fi
done
出力
$ ./flub
Testing 3a3 :
Testing ^[0-9]+$ :
Testing 2 : 2 matches
Testing 1919181818 : 1919181818 matches
Testing flub :
Testing 282_2828 :
Testing 38938 2828 :
Testing 3939. :
Testing .3939 :
そして、一重引用符で囲まれた拡張正規表現部分は、リテラル文字列にのみ一致します。
$ cat flub
#!/usr/bin/bash
for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
echo -n "Testing $VAR : "
if [[ "$VAR" =~ '^[0-9]+$' ]]; then
echo "$VAR" matches
else
echo
fi
done
$ ./flub
Testing 3a3 :
Testing ^[0-9]+$ : ^[0-9]+$ matches
Testing 2 :
Testing 1919181818 :
Testing flub :
Testing 282_2828 :
Testing 38938 2828 :
Testing 3939. :
Testing .3939 :
答え3
テストは$VAR
文字列が含まれているかどうかをテストすることです^[0-9]+$
。$VAR
正規表現をテストするには、^[0-9]+$
引用符を削除してください。
正規表現が一致すると、テストは真です。の文字列に$VAR
数字のみが含まれている場合(少なくとも一つ数字)。
同じテストを実行する別の方法は、次のものを使用することですcase
(これを行うと、他のシェルに移植可能になりますbash
)。
case "$VAR" in
*[!0-9]*)
# string has non-digits
;;
*[0-9]*)
# string has at least one digit
# (and no non-digits because that has already been tested)
;;
*)
# string must be empty due to the previous two tests failing
esac
答え4
正規表現が何を意味するのかわからない場合は、さまざまなオンラインツールのいずれかを使用してください。式のどの部分が何をしているかを正確に知らせるだけでなく、例えば一致も表示します。
これは例ですhttps://regex101.com/(他の素晴らしいサイトもあります):