Saya mencoba mencocokkan beberapa nilai alfanumerik (angka ini dapat bervariasi) dari string dan menyimpannya ke array grup bash capture. Namun, saya hanya mendapatkan pertandingan pertama:
mystring1='<link rel="self" href="/unix//api/clouds/1/instances/1BBBBBB"/> dsf <link rel="self" href="/unix//api/clouds/1/instances/2AAAAAAA"/>'
regex='/instances/([A-Z0-9]+)'
[[ $mystring1 =~ $regex ]]
echo ${BASH_REMATCH[1]}
1BBBBBB
echo ${BASH_REMATCH[2]}
Seperti yang Anda lihat - cocok dengan nilai pertama yang saya cari, tetapi tidak yang kedua.
bash
regular-expression
Arthur Lyssenko
sumber
sumber
echo "$mystring1" | grep -oE '/instances/([A-Z0-9]+)'
?Jawaban:
Sayang sekali Anda tidak dapat melakukan pencocokan global dalam bash. Kamu bisa melakukan ini:
Ini bekerja dengan memotong awalan yang cocok dari string sehingga bagian selanjutnya dapat dicocokkan. Itu menghancurkan string, tetapi dalam fungsi itu adalah variabel lokal, jadi siapa yang peduli.
Saya benar-benar akan menggunakan fungsi itu untuk mengisi array:
sumber
Untuk mendapatkan nilai array kedua, Anda harus memiliki set tanda kurung kedua di regex:
sumber