Biểu thức chính quy, thường được viết tắt là regex hoặc regexp, là các công cụ mạnh mẽ để làm việc với các mẫu văn bản trong Ruby. Chúng cho phép bạn tìm kiếm, so khớp, trích xuất và thao tác chuỗi dựa trên các mẫu cụ thể. Dù bạn đang xác thực đầu vào của người dùng, phân tích dữ liệu hay thực hiện xử lý văn bản phức tạp, các biểu thức chính quy trong Ruby cung cấp một giải pháp ngắn gọn và linh hoạt.
Hướng dẫn này sẽ dẫn bạn qua những kiến thức cơ bản về biểu thức chính quy trong Ruby, từ cú pháp cơ bản đến các kỹ thuật nâng cao.
Đối với các nhà phát triển Ruby đang tìm cách cải thiện quy trình kiểm tra API của họ nên xem xét Apidog, một lựa chọn mạnh mẽ tỏa sáng hơn Postman ở một số khía cạnh chính.
Apidog kết hợp tài liệu API, gỡ lỗi, kiểm tra tự động và mô phỏng trong một nền tảng đồng bộ, mang đến một trải nghiệm tích hợp hơn so với cách tiếp cận phân mảnh của Postman.

Với giao diện trực quan, xác thực sơ đồ tích hợp sẵn và các tính năng cộng tác nhóm toàn diện, Apidog giúp quản lý các dự án API phức tạp dễ dàng hơn nhiều.

Các nhà phát triển Ruby sẽ đánh giá cao hỗ trợ mạnh mẽ của Apidog cho tự động hóa thông qua giao diện dòng lệnh, tích hợp Git liền mạch cho phiên bản kiểm soát và tính tương thích OpenAPI/Swagger vượt trội—điều cần thiết để duy trì tài liệu chính xác bên cạnh các ứng dụng Ruby của bạn.

Dù bạn đang xây dựng các dịch vụ RESTful với Rails hay tạo ra microservices với Sinatra, bộ công cụ tất cả trong một của Apidog xóa bỏ việc chuyển đổi bối cảnh làm phiền người dùng Postman, cho phép bạn tập trung vào điều quan trọng nhất: viết mã Ruby tuyệt vời.
Tạo Biểu Thức Chính Quy Ruby
Trong Ruby, có một số cách để tạo biểu thức chính quy:
Phương pháp 1: Sử Dụng Dấu Gạch Ngang Trong Biểu Thức Chính Quy Ruby
Cách phổ biến nhất để tạo một biểu thức chính quy trong Ruby là đặt mẫu giữa các dấu gạch ngang:
/Ruby/ # Tạo một biểu thức chính quy khớp với "Ruby"
Phương pháp 2: Sử Dụng Cách Ghi Phần Trăm Đối Với Biểu Thức Chính Quy Ruby
Bạn cũng có thể sử dụng cách ghi phần trăm với chỉ báo %r
:
%r(Ruby) # Tương đương với /Ruby/
Điều này đặc biệt hữu ích khi mẫu của bạn chứa nhiều dấu gạch ngang, vì nó giúp tránh việc thoát quá mức.
Phương pháp 3: Sử Dụng Lớp Regexp Đối Với Biểu Thức Chính Quy Ruby
Một cách tiếp cận khác là sử dụng bộ khởi tạo Regexp.new
:
Regexp.new("Ruby") # Tương đương với /Ruby/
Tất cả các phương pháp này tạo ra các thể hiện của lớp Regexp
.
Các Ký Hiệu Cơ Bản Của Biểu Thức Chính Quy Ruby
Các biểu thức chính quy trong Ruby sử dụng các ký hiệu đặc biệt để đại diện cho các mẫu khác nhau. Dưới đây là một số ký hiệu cơ bản:
Ký hiệu | Mô tả | Ví dụ | Khớp |
---|---|---|---|
. |
Khớp với bất kỳ ký tự đơn nào | /a.b/ |
"axb", "a2b", "a b" |
* |
Khớp với 0 hoặc nhiều phần tử trước đó | /ab*c/ |
"ac", "abc", "abbc" |
+ |
Khớp với 1 hoặc nhiều phần tử trước đó | /ab+c/ |
"abc", "abbc", "abbbc" |
? |
Khớp với 0 hoặc 1 phần tử trước đó | /ab?c/ |
"ac", "abc" |
\| |
Hoán vị (HOẶC) | /cat\|dog/ |
"cat", "dog" |
[] |
Tầng lớp ký tự - khớp với bất kỳ ký tự nào được liệt kê | /[aeiou]/ |
"a", "e", "i", "o", "u" |
() |
Tạo một nhóm bắt giữ | /(abc)+/ |
"abc", "abcabc" |
^ |
Khớp với đầu của một chuỗi | /^start/ |
"start of string" |
$ |
Khớp với cuối của một chuỗi | /end$/ |
"the end" |
\\\\ |
Thoát một ký tự đặc biệt | /\\\\\\\\/ |
"\" |
Các Ký Tự Đặc Biệt Trong Biểu Thức Chính Quy Ruby
Các biểu thức chính quy trong Ruby bao gồm các lớp ký tự đã được định nghĩa trước giúp việc khớp mẫu trở nên thuận tiện hơn:
Ký hiệu | Mô tả | Ví dụ | Khớp |
---|---|---|---|
\\\\d |
Khớp với bất kỳ chữ số nào (0-9) | /\\\\d+/ |
"123", "9" |
\\\\D |
Khớp với bất kỳ ký tự không phải chữ số nào | /\\\\D+/ |
"abc", "!@#" |
\\\\w |
Khớp với bất kỳ ký tự từ nào (chữ số + gạch dưới) | /\\\\w+/ |
"ruby123", "user_name" |
\\\\W |
Khớp với bất kỳ ký tự không phải từ nào | /\\\\W+/ |
"!@#", " " |
\\\\s |
Khớp với bất kỳ ký tự khoảng trắng nào | /\\\\s+/ |
" ", "\t", "\n" |
\\\\S |
Khớp với bất kỳ ký tự không phải khoảng trắng nào | /\\\\S+/ |
"hello", "123" |
\\\\A |
Khớp với bắt đầu của một chuỗi | /\\\\AHello/ |
"Hello world" |
\\\\z |
Khớp với cuối của một chuỗi | /world\\\\z/ |
"Hello world" |
\\\\Z |
Khớp với cuối của một chuỗi hoặc trước dòng cuối cùng | /world\\\\Z/ |
"Hello world\n" |
Các Bộ Định Lượng Trong Biểu Thức Chính Quy Ruby
Các bộ định lượng cho phép bạn chỉ định số lần một mẫu nên khớp:
Bộ định lượng | Mô tả | Ví dụ | Khớp |
---|---|---|---|
* |
0 hoặc nhiều lần lặp lại | /ab*c/ |
"ac", "abc", "abbc" |
+ |
1 hoặc nhiều lần lặp lại | /ab+c/ |
"abc", "abbc" |
? |
0 hoặc 1 lần lặp lại | /colou?r/ |
"color", "colour" |
{n} |
Đúng n lần lặp lại | /a{3}/ |
"aaa" |
{n,} |
Ít nhất n lần lặp lại | /a{2,}/ |
"aa", "aaa", "aaaa" |
{n,m} |
Giữa n và m lần lặp lại | /a{2,4}/ |
"aa", "aaa", "aaaa" |
Chẳng hạn, để khớp với định dạng số điện thoại như "123-456-7890", bạn có thể sử dụng:
/\\\\d{3}-\\\\d{3}-\\\\d{4}/
Khớp Mẫu Với Các Biểu Thức Chính Quy Ruby
Sử Dụng Toán Tử Khớp Trong Các Biểu Thức Chính Quy Ruby
Cách cơ bản nhất để kiểm tra xem một mẫu có khớp với một chuỗi hay không là sử dụng toán tử =~
:
text = "Con cáo nâu nhanh nhẹn"
if /quick/ =~ text
puts "Khớp được tìm thấy tại chỉ mục #{$~.begin(0)}"
else
puts "Không tìm thấy khớp"
end
Toán tử =~
trả về chỉ mục của khớp đầu tiên hoặc nil
nếu không tìm thấy khớp. Sau một khớp thành công, bạn có thể sử dụng Regexp.last_match
hoặc biến toàn cục $~
để truy cập thông tin về khớp.
Các Nhóm Bắt Giữ Trong Các Biểu Thức Chính Quy Ruby
Bạn có thể sử dụng dấu ngoặc để tạo nhóm bắt giữ và trích xuất các phần cụ thể của một khớp:
text = "Tên: John, Tuổi: 30"
if match_data = /Tên: (\\\\w+), Tuổi: (\\\\d+)/.match(text)
name = match_data[1] # Nhóm bắt giữ đầu tiên
age = match_data[2] # Nhóm bắt giữ thứ hai
puts "Tên: #{name}, Tuổi: #{age}"
end
Trích Xuất Nội Dung Khớp Trong Các Biểu Thức Chính Quy Ruby
Để trích xuất tất cả các lần xuất hiện của một mẫu, hãy sử dụng phương thức scan
:
text = "Liên hệ với chúng tôi tại support@example.com hoặc info@example.org"
emails = text.scan(/\\\\w+@\\\\w+\\\\.\\\\w+/)
puts emails.inspect # ["support@example.com", "info@example.org"]
Làm Việc Với Các Biểu Thức Chính Quy Ruby Trong Thực Tế
Thay Thế Chuỗi Với Các Biểu Thức Chính Quy Ruby
Phương thức gsub
cho phép bạn thay thế tất cả các lần xuất hiện của một mẫu bằng một chuỗi đã chỉ định:
text = "táo chuối táo"
new_text = text.gsub(/táo/, "cam")
puts new_text # "cam chuối cam"
Bạn cũng có thể sử dụng một khối cho các thay thế phức tạp hơn:
text = "Giá là $10"
new_text = text.gsub(/\\\\$(\\\\d+)/) do |match|
"$#{$1.to_i * 1.1}" # Tăng giá 10%
end
puts new_text # "Giá là $11"
Hoán Vị Trong Các Biểu Thức Chính Quy Ruby
Ký hiệu ống (|
) cho phép bạn khớp một mẫu này hoặc mẫu khác:
/cat|dog/.match("Tôi có một con mèo") # Khớp với "cat"
/cat|dog/.match("Tôi có một con chó") # Khớp với "dog"
Bạn có thể sử dụng dấu ngoặc để nhóm các lựa chọn:
/(táo|chuối) bánh/.match("Tôi thích bánh táo") # Khớp với "bánh táo"
Các Lớp Ký Tự Trong Các Biểu Thức Chính Quy Ruby
Các lớp ký tự cho phép bạn khớp bất kỳ ký tự đơn nào từ một tập hợp:
/[aeiou]/.match("xin chào") # Khớp với "e"
/[0-9]/.match("đặc vụ007") # Khớp với "0"
Bạn cũng có thể phủ định một lớp ký tự:
/[^0-9]/.match("đặc vụ007") # Khớp với "a"
Các Hoạt Động Chuỗi Với Các Biểu Thức Chính Quy Ruby
Bắt Đầu Và Kết Thúc Các Khớp Trong Các Biểu Thức Chính Quy Ruby
Ruby cung cấp các phương thức thuận tiện để kiểm tra xem một chuỗi bắt đầu hoặc kết thúc bằng một mẫu cụ thể:
"Xin chào, Thế giới!".start_with?("Xin chào") # true
"Xin chào, Thế giới!".end_with?("Thế giới!") # true
Mặc dù những phương thức này không dựa trên regex, chúng thường được sử dụng cùng với các biểu thức chính quy cho các tác vụ thao tác chuỗi.
Các Biến Toàn Cục Trong Các Biểu Thức Chính Quy Ruby
Sau một khớp thành công, Ruby thiết lập một số biến toàn cục:
$&
- Văn bản khớp hoàn toàn$`` - Phần chuỗi trước khi khớp
$'
- Phần chuỗi sau khi khớp
/bb/ =~ "aabbcc"
puts $` # "aa"
puts $& # "bb"
puts $' # "cc"
Các Bộ Chỉnh Sửa Cho Các Biểu Thức Chính Quy Ruby
Các biểu thức chính quy trong Ruby hỗ trợ nhiều bộ chỉnh sửa khác nhau thay đổi cách mà các mẫu được diễn giải:
Bộ chỉnh sửa | Mô tả | Ví dụ |
---|---|---|
i |
Khớp không phân biệt chữ hoa chữ thường | /ruby/i khớp với "Ruby", "RUBY", "rUbY" |
m |
Chế độ đa dòng (dấu chấm khớp với dòng mới) | /./m khớp với bất kỳ ký tự nào bao gồm cả dòng mới |
x |
Chế độ mở rộng (cho phép chú thích và khoảng trắng) | /mẫu # chú thích/x |
o |
Thực hiện các phép nội suy #{} chỉ một lần | /#{pattern}/o |
u |
Mã hóa UTF-8 | /\\\\u{1F600}/u khớp với biểu tượng cảm xúc 😀 |
Các ví dụ:
/ruby/ =~ "RUBY" # nil (không khớp)
/ruby/i =~ "RUBY" # 0 (khớp từ đầu)
# Nếu không có bộ chỉnh sửa 'm', dấu chấm không khớp với các dòng mới
/a.b/ =~ "a\\\\nb" # nil
# Với bộ chỉnh sửa 'm', dấu chấm cũng khớp với dòng mới
/a.b/m =~ "a\\\\nb" # 0
Các Kỹ Thuật Biểu Thức Chính Quy Ruby Nâng Cao
Các Nhóm Không Bắt Giữ Trong Các Biểu Thức Chính Quy Ruby
Đôi khi bạn cần nhóm mà không bắt giữ văn bản đã khớp:
/(?:ab)+c/.match("ababc") # Khớp với "ababc" mà không bắt giữ "ab"
Nhìn Trước Và Nhìn Sau Trong Các Biểu Thức Chính Quy Ruby
Khẳng định nhìn trước cho phép bạn khớp một mẫu chỉ khi nó được theo sau bởi một mẫu khác:
# Khớp 'táo' chỉ khi theo sau bởi 'bánh'
/táo(?= bánh)/.match("táo bánh") # Khớp với "táo"
/táo(?= bánh)/.match("táo bánh tart") # Không khớp
# Khớp 'táo' chỉ khi KHÔNG theo sau bởi 'bánh'
/táo(?! bánh)/.match("táo bánh tart") # Khớp với "táo"
Khẳng định nhìn sau hoạt động tương tự nhưng kiểm tra những gì đến trước:
# Khớp 'bánh' chỉ khi được theo sau bởi 'táo'
/(?<=táo )bánh/.match("táo bánh") # Khớp với "bánh"
/(?<=táo )bánh/.match("bánh anh đào") # Không khớp
Mẹo Hiệu Suất Cho Các Biểu Thức Chính Quy Ruby
Hãy cụ thể: Các mẫu cụ thể thường hoạt động tốt hơn so với các mẫu tổng quát
Tránh lặp lại quá mức: Các mẫu phức tạp với nhiều bộ định lượng có thể dẫn đến vấn đề hiệu suất
Sử dụng các mỏ neo: Khi cần thiết, hãy sử dụng
\\\\A
,\\\\z
,^
và$
để giới hạn nơi các khớp có thể xảy raXem xét các lựa chọn thay thế: Đôi khi, các phương thức chuỗi đơn giản như
include?
hoặcstart_with?
nhanh hơn regex cho các trường hợp đơn giản
Kết Luận Về Các Biểu Thức Chính Quy Ruby
Các biểu thức chính quy Ruby là một công cụ mạnh mẽ trong bộ công cụ lập trình của bạn. Chúng cho phép bạn thực hiện xử lý văn bản phức tạp với cú pháp ngắn gọn. Mặc dù cú pháp có thể có vẻ đáng sợ ở lần đầu tiên, việc làm chủ các biểu thức chính quy sẽ giúp tăng đáng kể năng suất của bạn khi làm việc với văn bản trong Ruby.
Thực hành là chìa khóa để trở thành thành thạo với các biểu thức chính quy. Bắt đầu với các mẫu đơn giản và dần dần kết hợp các tính năng phức tạp hơn khi bạn cảm thấy thoải mái với những điều cơ bản. Nhiều công cụ trực tuyến như Rubular (https://rubular.com/) có thể giúp bạn kiểm tra và gỡ lỗi các biểu thức chính quy của mình một cách tương tác.
Bằng cách hiểu các khái niệm được đề cập trong hướng dẫn này, bạn sẽ được trang bị tốt để đối mặt với nhiều thách thức thao tác chuỗi trong các dự án Ruby của mình.