Bash pencocokan pola glob [0-9]
dapat digunakan untuk mencocokkan digit:
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Atau, Anda dapat menggunakan pencocokan pola regex dengan =~
:
if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi
Gunakan kelas karakter:[0-9]
cocok dengan 0
, 9
, dan setiap karakter di antaranya dalam kumpulan karakter, yang - setidaknya dalam Unicode (mis. UTF-8) dan kumpulan karakter subset (mis. US-ASCII, Latin-1) - adalah digit 1
melalui 8
. Jadi cocok dengan salah satu dari 10 digit Latin.
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Menggunakan =~
bukannya ==
mengubah jenis pola dari pola "glob" standar Shell menjadi ekspresi reguler ("singkatnya regex"). Anda dapat membuat regex yang setara sedikit lebih pendek:
if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi
Pemendekan pertama berasal dari fakta bahwa regex hanya harus cocok dengan bagian mana pun dari string, bukan semuanya. Oleh karena itu, Anda tidak memerlukan padanan dari *
di depan dan di belakang s yang Anda temukan dalam pola glob.
Pengurangan panjang kedua disebabkan oleh {n}
sintaks, yang memungkinkan Anda menentukan jumlah pengulangan yang tepat dari pola sebelumnya alih-alih benar-benar mengulang pola itu sendiri di regex. (Anda juga dapat mencocokkan salah satu rentang jumlah pengulangan dengan menentukan minimum dan maksimum, seperti [0-9]{2,4}
untuk mencocokkan dua, tiga, atau empat digit berturut-turut.)
Perlu dicatat bahwa Anda juga bisa menggunakan kelas karakter bernama untuk mencocokkan angka. Bergantung pada lokal Anda, [[:digit:]]
mungkin sama persis dengan [0-9]
, atau mungkin menyertakan karakter dari skrip lain dengan properti Unicode "Angka, Digit Desimal".
if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi