Saya perlu mengekstraksi serangkaian karakter yang termasuk di antara dua pembatas, tanpa mengembalikan pembatas itu sendiri.
Contoh sederhana harus bermanfaat:
Target : mengekstrak substring di antara tanda kurung kotak, tanpa mengembalikan tanda kurung itu sendiri.
String dasar :This is a test string [more or less]
Jika saya menggunakan reg berikut. ex.
\ [. *? \]
Pertandingannya adalah [more or less]
. Saya hanya perlu mendapatkan more or less
(tanpa tanda kurung).
Apakah mungkin untuk melakukannya?
Jawaban:
Mudah dilakukan:
Secara teknis itu menggunakan lookaheads dan lookbehinds. Lihat Lookahead dan Lookbehind Pernyataan Nol-Lebar . Polanya terdiri dari:
Atau Anda bisa menangkap apa yang ada di antara tanda kurung siku:
dan kembalikan grup yang ditangkap pertama alih-alih seluruh pertandingan.
sumber
This is a test string [more [or] less]
apakah ini akan kembalimore [or] less
?Jika Anda menggunakan JavaScript , solusi pertama yang disediakan oleh cletus,,
(?<=\[)(.*?)(?=\])
tidak akan berfungsi karena JavaScript tidak mendukung operator yang melihat di belakang.Namun, solusi kedua berfungsi dengan baik, tetapi Anda harus mendapatkan elemen yang cocok kedua.
Contoh:
Itu akan kembali:
Jadi, yang Anda butuhkan adalah nilai kedua. Menggunakan:
Mengembalikan:
sumber
Anda hanya perlu 'menangkap' bit di antara tanda kurung.
Untuk menangkap Anda memasukkannya ke dalam tanda kurung. Anda tidak mengatakan bahasa yang digunakan ini. Di Perl misalnya, Anda akan mengakses ini menggunakan variabel $ 1.
Bahasa lain akan memiliki mekanisme berbeda. C #, misalnya, menggunakan kelas koleksi Match , saya percaya.
sumber
[^\[]
Cocokkan karakter apa pun yang bukan [.+
Cocokkan 1 atau lebih dari apa pun yang tidak[
. Buat grup pertandingan ini.(?=\])
Penampilan positif]
. Cocokkan kelompok yang diakhiri dengan]
tanpa mencantumkannya dalam hasil.Selesai
Bukti.
http://regexr.com/3gobr
Mirip dengan solusi yang diajukan oleh null. Tetapi tambahan
\]
tidak diperlukan. Sebagai catatan tambahan, tampaknya\
tidak diperlukan untuk melarikan diri[
setelah^
. Agar mudah dibaca, saya akan membiarkannya masuk.Tidak berfungsi dalam situasi di mana pembatas identik.
"more or less"
sebagai contoh.sumber
PHP:
sumber
Untuk menghapus juga [] gunakan:
sumber
Saya memiliki masalah yang sama menggunakan regex dengan bash scripting. Saya menggunakan solusi 2 langkah menggunakan pipa dengan menerapkan grep -o
pertama kemudian
Jelas tidak seefisien jawaban lain, tetapi alternatif.
sumber
Ini khusus berfungsi untuk parser ekspresi reguler javascript
/[^[\]]+(?=])/g
jalankan saja ini di konsol
sumber
Saya ingin mencari string antara / dan #, tetapi # terkadang opsional. Berikut adalah regex yang saya gunakan:
sumber
Inilah cara saya mendapatkan tanpa '[' dan ']' dalam C #:
Outputnya adalah:
sumber
Jika Anda perlu mengekstrak teks tanpa tanda kurung, Anda dapat menggunakan bash awk
echo " [hola mundo] " | awk -F'[][]' '{print $2}'
hasil:
hola mundo
sumber