GNU/Linux >> Belajar Linux >  >> Linux

Definisi Ekspresi Reguler?

Baru-baru ini saya berdebat dengan Ghoti tentang apa yang merupakan ekspresi reguler dalam komentar untuk jawaban saya atas pertanyaan ini. Saya mengklaim bahwa berikut ini adalah ekspresi reguler:

`[Rr]eading[Tt]est[Dd]ata`

Ghoti tidak setuju, mengklaim itu adalah gumpalan file. Halaman glob di wikipedia mengklaim bahwa (penekanan milik saya):

Gumpalan tidak menyertakan sintaks untuk bintang Kleene yang memungkinkan beberapa
pengulangan dari bagian ekspresi sebelumnya; dengan demikian mereka tidak
dianggap sebagai ekspresi reguler, yang dapat menggambarkan kumpulan
bahasa reguler yang lebih besar di atas alfabet berhingga yang diberikan.

Namun, tidak ada kutipan untuk klaim ini, yang menunjukkan bahwa itu hanyalah opini editor wikipedia tertentu.

Spesifikasi The Single UNIX ®, Versi 2, menyatakan bahwa Basic Regular Expression (BRE) bahkan dapat berupa karakter tunggal:

Karakter biasa adalah BRE yang cocok dengan dirinya sendiri:karakter apa pun di
set karakter yang didukung, kecuali karakter khusus BRE
yang tercantum dalam Karakter Khusus BRE .

Jadi, apa definisi ekspresi reguler di *nix world, dan apakah definisi tersebut mengecualikan gumpalan file?

Jawaban yang Diterima:

Seperti yang lk- katakan, -name opsi find akan memperlakukan argumen sebagai gumpalan, bukan ekspresi reguler.

Apakah string ditafsirkan sebagai gumpalan atau regex atau hanya string biasa tergantung pada apa yang digunakan untuk melakukan interpretasi. Ini masalah konteks. String dalam contoh Anda, [Rr]eading[Tt]est[Dd]ata dapat dievaluasi dalam beberapa cara berbeda, tetapi apa itu tergantung bagaimana Anda menggunakannya. Gunakan itu sebagai gumpalan, itu gumpalan. Gunakan sebagai regex, ini regex. Dalam kasus pertanyaan dari mana asalnya, OP menggambarkan string sebagai regex. Oleh karena itu kita dapat menganggap dia berencana untuk menafsirkannya sebagai regex.

Satu karakter juga bisa menjadi regex, tentu saja. Itu juga bisa berupa string, dan juga bisa berupa gumpalan. Itu bisa diartikan sebagai byte atau tinyint, jika Anda suka. Itu semua tergantung pada konteksnya.

Ada sejumlah spesifikasi untuk ekspresi reguler dalam berbagai bentuk. BRE dan ERE didokumentasikan dengan baik. PCRE menambahkan beberapa fungsi. Banyak penerjemah regex akan mengimplementasikan, misalnya, "semua ERE dan sebagian PCRE". Atau mereka akan melakukan ERE minus beberapa fitur. Jika Anda menggunakan spesifikasi formal, banyak alat mengklaim dukungan regex yang ternyata salah atau tidak lengkap. Mengetahui detailnya memungkinkan Anda menyesuaikan solusi dengan kumpulan fungsionalitas yang tersedia dalam alat apa pun yang mengevaluasi ekspresi reguler Anda.

Terkait:Perintah `ls` tidak mencantumkan konten direktori terbaru?

Jadi ... jika Anda mencari definisi yang "mengecualikan" gumpalan, Anda melihatnya dari perspektif yang salah. Apa itu ditentukan oleh bagaimana Anda menggunakannya .


Linux
  1. Mengapa Ekspresi Reguler Bekerja Di X Tapi Tidak Di Y?

  2. Bash:Ekspresi Reguler Dalam Substitusi?

  3. Mengapa `\d` tidak berfungsi dalam ekspresi reguler di sed?

  1. Cara menggunakan lookahead untuk mengecualikan karakter khusus dalam ekspresi reguler

  2. Linux GUI Regular Expression File Renamer (dengan substitusi)

  3. Mewarnai Terminal Secara Global oleh Regex

  1. Bagaimana Anda menggunakan ekspresi reguler dengan perintah cp di Linux?

  2. Ekspresi Reguler untuk menemukan karakter ganda di Bash

  3. rentang nomor ekstrak grep