Tcl - Ekspresi Reguler

Perintah "regexp" digunakan untuk mencocokkan ekspresi reguler di Tcl. Ekspresi reguler adalah rangkaian karakter yang berisi pola pencarian. Ini terdiri dari beberapa aturan dan tabel berikut menjelaskan aturan ini dan penggunaan yang sesuai.

Sr.No. Aturan & Deskripsi
1

x

Benar-benar cocok.

2

[a-z]

Semua huruf kecil dari az.

3

.

Karakter apapun.

4

^

String awal harus cocok.

5

$

String akhir harus cocok.

6

\^

Urutan backlash untuk mencocokkan karakter khusus ^. Demikian pula Anda dapat menggunakan karakter lain.

7

()

Tambahkan urutan di atas di dalam tanda kurung untuk membuat ekspresi reguler.

8

x*

Harus cocok dengan 0 atau lebih kemunculan x sebelumnya.

9

x+

Harus cocok dengan 1 atau lebih kemunculan x sebelumnya.

10

[a-z]?

Harus cocok dengan 0 atau 1 kemunculan x sebelumnya.

11

{digit}

Cocok persis dengan digit kemunculan ekspresi regex sebelumnya. Digit yang berisi 0-9.

12

{digit,}

Cocok dengan 3 digit atau lebih kemunculan ekspresi regex sebelumnya. Digit yang berisi 0-9.

13

{digit1,digit2}

Kemunculan cocok dengan rentang antara digit1 dan digit2 kemunculan ekspresi regex sebelumnya.

Sintaksis

Sintaks untuk regex diberikan di bawah ini -

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Di sini, regex adalah perintahnya. Kita akan melihat tentang sakelar opsional nanti. Pola adalah aturan seperti yang disebutkan sebelumnya. String pencarian adalah string sebenarnya tempat regex dijalankan. Pencocokan penuh adalah variabel apa pun untuk menahan hasil dari hasil ekspresi reguler yang cocok. Submatch1 to SubMatchn adalah variabel subMatch opsional yang menyimpan hasil dari pola sub match.

Mari kita lihat beberapa contoh sederhana sebelum menyelami yang rumit. Contoh sederhana untuk string dengan huruf apa pun. Ketika karakter lain ditemui regex, pencarian akan dihentikan dan dikembalikan.

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Full Match: Tcl
Sub Match1: Tcl

Beberapa Pola

Contoh berikut menunjukkan cara mencari beberapa pola. Ini adalah contoh pola untuk huruf apapun yang diikuti dengan karakter apapun yang diikuti oleh huruf apapun.

#!/usr/bin/tclsh

regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

Versi modifikasi dari kode di atas untuk menunjukkan bahwa sub pola dapat berisi banyak pola ditunjukkan di bawah -

#!/usr/bin/tclsh

regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Sakelar untuk Perintah Regex

Daftar sakelar yang tersedia di Tcl adalah,

  • nocase - Digunakan untuk mengabaikan kasus.

  • indices - Simpan lokasi sub pola yang cocok, bukan karakter yang cocok.

  • line- Pencocokan sensitif baris baru. Mengabaikan karakter setelah baris baru.

  • start index - Mengatur offset awal pola pencarian.

  • Menandai akhir sakelar

Dalam contoh di atas, saya sengaja menggunakan [AZ, az] untuk semua huruf, Anda dapat dengan mudah menggunakan -nocase daripada seperti yang ditunjukkan di bawah ini -

#!/usr/bin/tclsh

regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Contoh lain menggunakan sakelar ditunjukkan di bawah ini -

#!/usr/bin/tclsh

regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b  
puts "Full Match: $a"
puts "Sub Match1: $b"

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial