Tcl - Biểu thức chính quy

Lệnh "regexp" được sử dụng để khớp một biểu thức chính quy trong Tcl. Biểu thức chính quy là một chuỗi các ký tự có chứa mẫu tìm kiếm. Nó bao gồm nhiều quy tắc và bảng sau giải thích các quy tắc này và cách sử dụng tương ứng.

Sr.No. Quy tắc & Mô tả
1

x

Kết hợp chuẩn xác.

2

[a-z]

Bất kỳ chữ cái thường nào từ az.

3

.

Nhân vật bất kỳ.

4

^

Chuỗi bắt đầu phải khớp.

5

$

Chuỗi kết thúc phải khớp.

6

\^

Chuỗi dấu gạch chéo ngược để khớp với ký tự đặc biệt ^. Tương tự, bạn có thể sử dụng cho các ký tự khác.

7

()

Thêm các chuỗi trên vào trong dấu ngoặc đơn để tạo một biểu thức chính quy.

số 8

x*

Phải khớp với 0 hoặc nhiều lần xuất hiện của x trước đó.

9

x+

Phải khớp với 1 hoặc nhiều lần xuất hiện của x trước đó.

10

[a-z]?

Phải khớp với 0 hoặc 1 lần xuất hiện của x trước đó.

11

{digit}

Đối sánh chính xác số lần xuất hiện của biểu thức regex trước đó. Chữ số có chứa 0-9.

12

{digit,}

Khớp với 3 lần xuất hiện chữ số trở lên của biểu thức regex trước đó. Chữ số có chứa 0-9.

13

{digit1,digit2}

Số lần xuất hiện khớp với phạm vi giữa các lần xuất hiện chữ số 1 và chữ số 2 của biểu thức regex trước đó.

Cú pháp

Cú pháp cho regex được đưa ra dưới đây:

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Ở đây, regex là lệnh. Chúng ta sẽ xem về các công tắc tùy chọn sau. Các mẫu là các quy tắc như đã đề cập trước đó. Chuỗi tìm kiếm là chuỗi thực mà regex được thực hiện. Đối sánh đầy đủ là bất kỳ biến nào để giữ kết quả của kết quả regex đã khớp. Submatch1 đến SubMatchn là biến SubMatch tùy chọn chứa kết quả của các mẫu đối sánh phụ.

Hãy xem một số ví dụ đơn giản trước khi đi sâu vào những ví dụ phức tạp. Một ví dụ đơn giản cho một chuỗi với bất kỳ bảng chữ cái nào. Khi bất kỳ ký tự nào khác gặp phải regex, tìm kiếm sẽ bị dừng và trả về.

#!/usr/bin/tclsh

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

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Full Match: Tcl
Sub Match1: Tcl

Nhiều mẫu

Ví dụ sau đây cho thấy cách tìm kiếm nhiều mẫu. Đây là mẫu ví dụ cho bất kỳ bảng chữ cái nào được theo sau bởi bất kỳ ký tự nào theo sau bởi bất kỳ bảng chữ cái nào.

#!/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"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

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

Một phiên bản sửa đổi của mã trên để cho thấy rằng một mẫu phụ có thể chứa nhiều mẫu được hiển thị bên dưới:

#!/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"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

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

Công tắc cho lệnh Regex

Danh sách các công tắc có sẵn trong Tcl là,

  • nocase - Dùng để bỏ qua trường hợp.

  • indices - Lưu trữ vị trí của các mẫu phụ phù hợp thay vì các ký tự phù hợp.

  • line- Đối sánh nhạy dòng mới. Bỏ qua các ký tự sau dòng mới.

  • start index - Đặt độ lệch của thời điểm bắt đầu mẫu tìm kiếm.

  • Đánh dấu sự kết thúc của công tắc

Trong các ví dụ trên, tôi đã cố ý sử dụng [AZ, az] cho tất cả các bảng chữ cái, bạn có thể dễ dàng sử dụng -nocase thay vì như hình dưới đây -

#!/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"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

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

Một ví dụ khác sử dụng công tắc được hiển thị bên dưới:

#!/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"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

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