If-Koubou

Bagaimana Menggunakan Ekspresi Reguler Dasar untuk Menelusuri Lebih Baik dan Menghemat Waktu

Bagaimana Menggunakan Ekspresi Reguler Dasar untuk Menelusuri Lebih Baik dan Menghemat Waktu (Bagaimana caranya)

Apakah Anda sudah mencari dengan Grep atau melihat program yang dapat mengubah nama file untuk Anda, Anda mungkin bertanya-tanya apakah ada cara yang lebih mudah untuk menyelesaikan pekerjaan Anda. Untungnya, ada, dan itu disebut "ekspresi reguler."

(Komik dari XKCD.com)

Apa itu Ekspresi Reguler?

Ekspresi reguler adalah pernyataan yang diformat dengan cara yang sangat spesifik dan dapat berdiri untuk banyak hasil yang berbeda. Juga dikenal sebagai "regex" atau "regexp," mereka terutama digunakan dalam fungsi penamaan file dan pencarian. Satu regex dapat digunakan seperti rumus untuk membuat sejumlah kemungkinan output yang berbeda, yang semuanya dicari. Sebagai alternatif, Anda dapat menentukan bagaimana sekelompok file harus dinamai dengan menetapkan regex, dan perangkat lunak Anda dapat secara bertahap pindah ke output yang dimaksudkan berikutnya. Dengan cara ini, Anda dapat mengganti nama banyak file dalam beberapa folder dengan sangat mudah dan efisien, dan Anda dapat bergerak melampaui batasan sistem penomoran sederhana.

Karena penggunaan ekspresi reguler bergantung pada sintaks khusus, program Anda harus mampu membaca dan menguraikannya. Banyak program penggantian nama file batch untuk Windows dan OS X memiliki dukungan untuk regexps, serta alat pencarian cross-platform GREP (yang kami sentuh di Bash Scripting kami untuk Panduan Pemula) dan alat baris perintah Awk untuk * Nix. Selain itu, banyak pengelola file alternatif, peluncur, dan alat pencarian menggunakannya, dan mereka memiliki tempat yang sangat penting dalam bahasa pemrograman seperti Perl dan Ruby. Lingkungan pengembangan lainnya seperti .NET, Java, dan Python, serta C ++ 11 mendatang, semuanya menyediakan pustaka standar untuk menggunakan ekspresi reguler. Seperti yang Anda bayangkan, mereka bisa sangat berguna ketika mencoba untuk meminimalkan jumlah kode yang Anda masukkan ke dalam suatu program.

Catatan tentang Karakter Escaping

Sebelum kami menunjukkan kepada Anda dengan contoh, kami ingin menunjukkan sesuatu. Kita akan menggunakan shell bash dan perintah grep untuk menunjukkan kepada Anda bagaimana menerapkan ekspresi reguler. Masalahnya adalah bahwa kadang-kadang kita ingin menggunakan karakter khusus yang perlu dilewatkan ke grep, dan shell bash akan menafsirkan karakter itu karena shell menggunakannya juga. Dalam keadaan seperti ini, kita perlu "melarikan diri" dari karakter-karakter ini. Ini bisa membingungkan karena "escape" karakter juga terjadi di dalam regexps. Misalnya, jika kita ingin memasukkan ini ke dalam grep:

\<

kita harus mengganti itu dengan:

\\\<

Setiap karakter khusus di sini mendapat satu backslash. Atau, Anda juga dapat menggunakan tanda kutip tunggal:

'\<'

Kutipan tunggal mengatakan bash TIDAK untuk menafsirkan apa yang ada di dalamnya. Meskipun kami memerlukan langkah-langkah ini agar kami dapat menunjukkannya untuk Anda, program Anda (terutama yang berbasis GUI) sering tidak akan memerlukan langkah-langkah tambahan ini. Untuk menjaga hal-hal sederhana dan lugas, ekspresi reguler yang sebenarnya akan diberikan kepada Anda sebagai teks kutipan, dan Anda akan melihat sintaks yang lolos dalam tangkapan layar baris perintah.

Bagaimana Mereka Memperluas?

Regexps adalah cara yang sangat ringkas untuk menyatakan istilah sehingga komputer Anda dapat memperluasnya menjadi beberapa opsi. Mari kita lihat contoh berikut:

tom [0123456789]

Tanda kurung siku - [dan] - beri tahu parsing engine bahwa apa pun yang ada di dalamnya, setiap karakter ONE mungkin digunakan untuk mencocokkan. Apa pun yang ada di dalam kurung itu disebut set karakter.

Jadi, jika kami memiliki daftar entri yang sangat banyak dan kami menggunakan regex ini untuk menelusuri, istilah berikut akan dicocokkan:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

dan seterusnya. Namun, daftar berikut TIDAK akan dicocokkan, sehingga TIDAK akan muncul dalam hasil Anda:

  • tomat ; regex tidak memperhitungkan huruf apa pun setelah "tom"
  • Tom; regex adalah case sensitive!

Anda juga dapat memilih untuk mencari dengan periode (.) Yang akan memungkinkan setiap karakter yang ada, selama ada karakter yang hadir.

Seperti yang Anda lihat, bersenandung dengan

.tom

tidak memunculkan istilah yang hanya memiliki "tom" di awal. Bahkan "tomat hijau" masuk, karena ruang sebelum "tom" dianggap sebagai karakter, tetapi istilah seperti "tomF" tidak memiliki karakter di awal dan dengan demikian diabaikan.

Catatan: Perilaku default Grep adalah mengembalikan seluruh baris teks ketika beberapa bagian cocok dengan regex Anda. Program lain mungkin tidak melakukan ini, dan Anda dapat menonaktifkannya dengan grep dengan tanda '-o'.

Anda juga dapat menentukan alternatif menggunakan pipa (|), seperti di sini:

speciali (s | z) e

Ini akan menemukan keduanya:

  • mengkhususkan
  • mengkhususkan

Saat menggunakan perintah grep, kita perlu menghindari karakter khusus (, |, dan) dengan backslashes dan juga memanfaatkan flag '-E' untuk membuatnya bekerja dan menghindari kesalahan yang jelek.

Seperti yang kami sebutkan di atas, ini karena kita perlu memberi tahu shell bash untuk meneruskan karakter-karakter ini ke grep dan tidak melakukan apa-apa dengan mereka. Tanda '-E' memberi tahu grep untuk menggunakan tanda kurung dan pipa sebagai karakter khusus.

Anda dapat mencari dengan pengecualian menggunakan tanda sisipan yang berada di dalam kurung kotak Anda dan di awal set:

tom [^ F | 0-9]

Sekali lagi, jika Anda menggunakan grep dan bash, ingatlah untuk melarikan diri dari pipa itu!

Istilah yang ada di daftar tetapi TIDAK muncul adalah:

  • tom0
  • tom5
  • tom9
  • tomF

Ini tidak sesuai dengan regex kami.

Bagaimana Saya Dapat Memanfaatkan Lingkungan?

Seringkali, kami mencari berdasarkan batasan. Terkadang kita hanya menginginkan string yang muncul di awal kata, di akhir kata, atau di akhir baris kode. Ini dapat dengan mudah dilakukan menggunakan apa yang kita sebut jangkar.

Menggunakan tanda sisipan (di luar tanda kurung) memungkinkan Anda menetapkan "awal" suatu garis.

^ tom

Untuk mencari akhir baris, gunakan tanda dolar.

tom $

Anda dapat melihat bahwa string pencarian kami muncul SEBELUM anchor dalam kasus ini.

Anda juga bisa untuk pertandingan yang muncul di awal atau akhir kata, bukan garis utuh.

\<>

tom \>

Seperti yang kami sebutkan di catatan di awal artikel ini, kita perlu keluar dari karakter khusus ini karena kita menggunakan bash. Atau, Anda juga dapat menggunakan tanda kutip tunggal:

Hasilnya sama. Pastikan Anda menggunakan tanda kutip tunggal, dan bukan tanda kutip ganda.

Sumber Daya Lain Untuk Regexps Lanjutan

Kami baru saja mencapai puncak gunung es di sini. Anda juga dapat mencari istilah uang yang digambarkan oleh penanda mata uang, dan mencari salah satu dari tiga atau lebih istilah yang cocok. Segalanya bisa sangat rumit. Jika Anda tertarik untuk mempelajari lebih lanjut tentang ekspresi reguler, silakan lihat sumber-sumber berikut.

  • Zytrax.com memiliki beberapa halaman dengan contoh spesifik tentang mengapa hal-hal dilakukan dan tidak cocok.
  • Reguler-Expressions.info juga memiliki panduan pembunuh untuk banyak hal yang lebih maju, serta halaman referensi yang berguna.
  • Gnu.org memiliki halaman yang didedikasikan untuk menggunakan regexps dengan grep.

Anda juga dapat membangun dan menguji ekspresi reguler Anda menggunakan alat online berbasis Flash gratis yang disebut RegExr. Ia berfungsi saat Anda mengetik, gratis, dan dapat digunakan di sebagian besar browser.

Apakah Anda memiliki penggunaan favorit untuk ekspresi reguler? Tahu tentang reamer besar batch yang menggunakan mereka? Mungkin Anda hanya ingin membual tentang grep-fu Anda. Sumbangkan pikiran Anda dengan berkomentar!