Pertanyaan Lompati garis miring ke depan dalam ekspresi reguler


Pertanyaan saya adalah pertanyaan sederhana, dan ini tentang ekspresi reguler yang melarikan diri. Apakah Anda harus melarikan diri dari garis miring ke depan / dalam ekspresi reguler? Dan bagaimana Anda akan melakukannya?


75
2018-05-20 18:35


asal


Jawaban:


Apa konteks / bahasanya? Beberapa bahasa digunakan / sebagai pemisah pola, jadi ya, Anda harus menghindarinya, tergantung pada bahasa / konteksnya. Anda melarikan diri dengan menempatkan garis miring ke belakang di depannya: \/ Untuk beberapa bahasa (seperti PHP) Anda dapat menggunakan karakter lain sebagai pemisah dan karena itu Anda tidak perlu menghindarinya. Tapi AFAIK dalam semua bahasa, satu-satunya arti khusus / Apakah itu mungkin merupakan pembatas pola yang ditentukan.


63
2018-05-20 18:38



Berikut beberapa opsi:

  • Di Perl, Anda dapat memilih pembatas alternatif. Anda tidak terbatas pada m//. Anda dapat memilih yang lain, seperti m{}. Maka melarikan diri tidak perlu. Faktanya, Damian Conway dalam "Perl Best Practices" menegaskan hal itu m{} adalah satu-satunya delimiter alternatif yang harus digunakan, dan ini diperkuat oleh Perl :: Critic (pada CPAN). Meskipun Anda dapat menggunakan berbagai karakter pembatas alternatif, // dan {} tampaknya menjadi yang paling jelas untuk menguraikan nanti. Namun, jika salah satu dari pilihan tersebut menghasilkan terlalu banyak pelarian, pilih yang mana yang paling cocok untuk keterbacaan. Contoh umum adalah m(...), m[...], dan m!...!.

  • Dalam kasus di mana Anda tidak bisa atau lebih suka tidak menggunakan pembatas alternatif, Anda dapat menghindari garis miring ke depan dengan backslash: m/\/[^/]+$/ misalnya (menggunakan pemisah alternatif yang bisa menjadi m{/[^/]+$}, yang dapat membaca lebih jelas). Melarikan slash dengan backslash cukup umum untuk mendapatkan nama dan halaman wikipedia: Sindrom Tusuk Gigi Leaning. Dalam ekspresi reguler di mana hanya ada satu contoh, melarikan diri dari garis miring mungkin tidak naik ke tingkat yang dianggap sebagai penghalang untuk keterbacaan, tetapi jika itu mulai keluar dari tangan, dan jika bahasa Anda memungkinkan pembatas alternatif seperti Perl, itu akan menjadi solusi yang disukai.


28
2018-05-20 19:09



Gunakan backslash \ atau pilih pembatas yang berbeda, yaitu m#.\d# dari pada /.\d/ "Dalam Perl, Anda dapat mengubah pemisah ekspresi reguler / ke hampir semua karakter khusus lainnya jika Anda mengawali dengan huruf m (untuk pertandingan);"


8
2018-05-20 19:02



Jika pemisah adalah /, Anda harus melarikan diri.


5
2018-05-20 18:39