Pertanyaan regex sederhana. Saya memiliki string pada format berikut:
this is a [sample] string with [some] special words. [another one]
Apa ekspresi reguler untuk mengekstrak kata-kata dalam tanda kurung siku, yaitu.
sample
some
another one
Catatan: Dalam kasus penggunaan saya, tanda kurung tidak dapat disarangkan.
[^]]
lebih cepat daripada non-serakah (?
), dan juga bekerja dengan rasa regex yang tidak mendukung non-serakah. Namun, yang tidak rakus terlihat lebih baik.[
]
dari output (hasil)?Akan mengambil konten tanpa tanda kurung
(?<=\[)
- Terlihat positif di belakang[
.*?
- Kecocokan non serakah untuk konten(?=\])
- lookahead positif untuk]
Sunting: untuk tanda kurung bersarang regex di bawah ini akan berfungsi:
sumber
.
di dalamnya ...Ini seharusnya berhasil:
sumber
\[([^\[\]]*)\]
untuk mendapatkan konten di braket paling dalam. Jika Anda melihat ke dalamlfjlksd [ded[ee]22]
maka\[([^]]+)\]
Anda akan mendapatkan[ded[ee]
sementara ekspresi yang diusulkan akan kembali[ee]
. testede in linkBisakah kurung bersarang?
Jika tidak:
\[([^]]+)\]
cocok dengan satu item, termasuk tanda kurung. Referensi balik\1
akan berisi item yang cocok. Jika rasa regex Anda mendukung lookaround, gunakanIni hanya akan cocok dengan item di dalam tanda kurung.
sumber
/g
bendera di JavaScript).Jika Anda tidak ingin menyertakan tanda kurung dalam pertandingan, inilah regexnya:
(?<=\[).*?(?=\])
Mari kita jabarkan
The
.
cocok dengan sembarang karakter kecuali untuk line terminator. Ini?=
adalah tampilan yang positif . Seorang lookahead positif menemukan string ketika string tertentu datang setelahnya. Ini?<=
adalah tampilan positif di belakang . Pandangan positif di balik menemukan string ketika string tertentu mendahuluinya. Mengutip ini ,Alternatifnya
Jika mesin regex Anda tidak mendukung lookaheads dan lookbehinds, maka Anda dapat menggunakan regex
\[(.*?)\]
untuk menangkap jeroan kurung dalam sebuah grup dan kemudian Anda dapat memanipulasi grup sesuai kebutuhan.Bagaimana cara kerja regex ini?
Tanda kurung menangkap karakter dalam grup. The
.*?
mendapatkan semua karakter antara tanda kurung (kecuali untuk terminator garis, kecuali jika Anda memilikis
bendera diaktifkan) dengan cara yang tidak serakah.sumber
(?<=\[).*?(?=\])
berfungsi baik sesuai penjelasan yang diberikan di atas. Berikut ini contoh Python:sumber
[]
), bukan tanda kurung.Untuk jaga-jaga, Anda mungkin memiliki tanda kurung tidak seimbang , Anda mungkin dapat merancang beberapa ekspresi dengan rekursi yang mirip dengan,
yang tentu saja, itu akan berhubungan dengan bahasa atau mesin RegEx yang mungkin Anda gunakan.
Demo RegEx 1
Selain itu,
Demo RegEx 2
atau,
Demo RegEx 3
adalah pilihan yang baik untuk dijelajahi.
Jika Anda ingin menyederhanakan / memodifikasi / menjelajahi ekspresi, sudah dijelaskan di panel kanan atas regex101.com . Jika mau, Anda juga dapat menonton di tautan ini , bagaimana itu cocok dengan beberapa input sampel.
Sirkuit RegEx
jex.im memvisualisasikan ekspresi reguler:
Uji
Sumber
Ekspresi reguler untuk mencocokkan tanda kurung yang seimbang
sumber
jika Anda ingin mengisi hanya huruf alfabet kecil antara braket persegi az
jika Anda ingin huruf kecil dan huruf a-zA-Z
jika Anda ingin topi kecil dan nomor huruf a-zA-Z0-9
jika Anda ingin semuanya antara braket persegi
jika Anda ingin teks, angka dan simbol
sumber
Di atas harus bekerja diberikan penjelasan berikut
karakter dalam tanda kurung siku [] mendefinisikan kelas characte yang berarti pola harus cocok setidaknya satu karakter yang disebutkan dalam tanda kurung kotak
Menentukan spasi
+ Berarti minimal salah satu karakter yang disebutkan sebelumnya ke +.
sumber
A-Z
- kasus sensitif harus menambah pola([[][a-zA-Z \s]+[]])
:; Saya pikir itu cara yang baik, sementara\
dalam pola regex yang mendefinisikan dalam tanda string ("dan ') dan mencampur pemula dengan penanganan backslash dalam" atau' penggunaan!std::regex pattern{R"(["][a-zA-Z \s]+["])"};
Kode ini akan mengekstraksi konten antara tanda kurung dan kurung
sumber
Di R, coba:
sumber
gsub(pat, "\\1", x, perl=TRUE)
, di manapat
ekspresi reguler yang Anda berikan ..Saya perlu memasukkan baris baru dan termasuk tanda kurung
\[[\s\S]+\]
sumber
Untuk mencocokkan substring antara yang pertama
[
dan yang terakhir]
, Anda dapat menggunakanLihat demo regex dan demo regex # 2 .
Gunakan ekspresi berikut untuk mencocokkan string antara tanda kurung kotak terdekat :
Termasuk tanda kurung:
\[[^][]*]
- PCRE, Pythonre
/regex
, .NET, Golang, POSIX (grep, sed, bash)\[[^\][]*]
- ECMAScript (JavaScript, C ++std::regex
, VBARegExp
)\[[^\]\[]*]
- regex Jawa\[[^\]\[]*\]
- Onigmo (Ruby, membutuhkan pelarian di mana-mana)Tidak termasuk tanda kurung:
(?<=\[)[^][]*(?=])
- PCRE, Pythonre
/regex
, .NET (C #, dll.), ICU (Rstringr
), Perangkat Lunak JGSoft\[([^][]*)]
- Bash , Golang - tangkap isi antara tanda kurung siku dengan sepasang tanda kurung yang tidak dilepas, juga lihat di bawah\[([^\][]*)]
- JavaScript , C ++std::regex
, VBARegExp
(?<=\[)[^\]\[]*(?=])
- regex Jawa(?<=\[)[^\]\[]*(?=\])
- Onigmo (Ruby, membutuhkan pelarian di mana-mana)CATATAN :
*
cocok dengan 0 atau lebih karakter, gunakan+
untuk mencocokkan 1 atau lebih untuk menghindari kecocokan string kosong dalam daftar / array yang dihasilkan.Setiap kali kedua dukungan lookaround tersedia, solusi di atas bergantung pada mereka untuk mengecualikan braket buka / tutup terkemuka / tertinggal. Jika tidak, andalkan kelompok penangkap (tautan ke solusi paling umum dalam beberapa bahasa telah disediakan).
Jika Anda harus mencocokkan tanda kurung bersarang , Anda dapat melihat solusi dalam ekspresi Reguler untuk mencocokkan untaian tanda kurung yang seimbang dan mengganti tanda kurung bulat dengan tanda kurung siku untuk mendapatkan fungsionalitas yang diperlukan. Anda harus menggunakan grup penangkap untuk mengakses konten dengan braket buka / tutup dikecualikan:
\[((?:[^][]++|(?R))*)]
- PHP PCRE\[((?>[^][]+|(?<o>)\[|(?<-o>]))*)]
- .NET demo\[(?:[^\]\[]++|(\g<0>))*\]
- Demo Onigmo (Ruby)sumber