"^[0-9]+$" とはどういう意味ですか?

"^[0-9]+$" とはどういう意味ですか?

この表現パターンは何を'^[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/(他の素晴らしいサイトもあります): 正規表現

関連情報