Mengapa ada banyak varian ekspresi reguler? [Tutup]

13

Hari ini ketika saya meninjau kode sumber proyek kami, saya menemukan ada banyak "spasi" dan "tab" yang tidak perlu yang terletak di ujung setiap baris. Jadi saya memutuskan untuk menghapusnya dengan ekspresi reguler.

Namun, saya menemukan perintah sed -i '/\s+$/d' tidak bekerja Sampai saya mengubah perintah menjadi see -ri '/\s+$/d', itu bertindak sebagai harapan saya. Dari manual sed, itu berkata -r memanggil regexp yang diperluas.

Saya bingung, mengapa ada begitu banyak varian regexp? Seperti vim / emacs / perl / sed regexp. Mengapa regexp tidak dapat menawarkan antarmuka pengguna yang unik?

hero2008
sumber

Jawaban:

19

Untuk alasan historis. Tidak ada definisi sintaksis "Regresi reguler". Konsep ekspresi reguler itu sendiri tidak ada hubungannya dengan sintaks aktual yang secara formal menggambarkannya. Orang-orang telah datang dengan cara berbeda untuk mengatakan hal yang sama, maka gaya sintaksis regex berbeda.

Namun, Anda akan menemukan bahwa sebagian besar ada dua kelompok definisi sekitar hari ini:

  1. POSIX ekspresi reguler yang menentukan Basic (BRE) dan Extended Regular Expressions (ERE). Kebingungan dimulai di mana misalnya, menggunakan Ekspresi Reguler Dasar \( \) untuk menunjukkan grup, dan Ekspresi Reguler Diperpanjang digunakan ( ) untuk itu.

  2. Ekspresi reguler berbasis-perl . Perl regular expressions mendefinisikan sintaks yang lebih konsisten, di mana sebagai contoh garis miring terbalik akan selalu keluar dari karakter non-alfanumerik. Sintaks Perl regex ditemukan dalam banyak bahasa pemrograman populer hari ini, dari Jawa ke Ruby.

Anda dapat memeriksa Artikel Wikipedia tentang sintaks regex untuk info lebih lanjut.

slhck
sumber