Bagaimana cara menggunakan Regex untuk mencocokkan setiap kemunculan string antara dua string di sekitarnya, tidak termasuk string di sekitarnya?

Saya kesulitan dengan regex. Inilah perintah yang saya gunakan (menjalankan Cygwin di Windows) atas saran hwnd (yang telah memecahkan masalah saya sebelumnya):

grep -Po '(?<="id":)[^,]+' regex_test.txt

Bagaimana cara mengubah ekspresi reguler sehingga kecocokan yang dibuat dimulai dengan ,{id: ATAU :[{id: ? Sayangnya, ekspresi saat ini juga menangkap ID yang tidak diinginkan yang diawali dengan :{id:

Masukkan File Teks bernama regex_test.txt:

alasan:{id:25549177,“pattern:null},iphone:[{id:2411977008,version:null},{id:2430057923,

Keluaran:

25549177

2411977008

2430057923

Keluaran yang Diinginkan:

2411977008

2430057923

Tolong beri tahu saya pendapat Anda tentang masalah ini.


person Sonia    schedule 12.04.2015    source sumber
comment
@ Сухой27 Pertanyaan ini sepertinya bukan duplikat: Ini tentang [pcre] dan [grep] ! (penggunaan shell, bukan Perl.) seperti yang saya mengerti. Juga lookaround merupakan fitur menarik yang tidak ditampilkan dalam tautan yang dimaksudkan untuk berpura-pura duplikat.   -  person F. Hauri    schedule 12.04.2015


Jawaban (1)


Anda bisa menggunakan pernyataan Positive Lookbehind ( seperti yang ditunjukkan dalam jawaban ):

grep -Po '(?<="id":)[^,]+' regex_test.txt

Demo Ideone

person hwnd    schedule 12.04.2015
comment
@hwnd Ada masalah lain yang saya hadapi. Bagaimana cara mengubah ekspresi reguler Anda sehingga kecocokan yang dibuat dimulai dengan ,{id: ATAU :[{id: (kondisi yang lebih spesifik daripada saat ini“ id”: ? Sayangnya, ekspresi saat ini juga menangkap ID yang tidak diinginkan yang diawali dengan :{id: . - person Sonia; 13.04.2015
comment
@Sonia, coba (?<=[[,]{"id":)[^,]+ - person hwnd; 13.04.2015
comment
@hwnd Itu berhasil. Saya mencoba melarikan diri dari [ { karakter. Terima kasih! - person Sonia; 13.04.2015