+2

Regular Expression

Có một câu nói rất hay trong bài viết

"Regular Expression (Regexp) là thứ mà lúc nào đụng đến cũng đều thấy nó mới"

Quả thực mỗi lần muốn thực hiện một biểu thức Regex là mình lại phải suy nghĩ một lúc mới ra, có khi còn phải search lại một số rules mới có thể lấy ra được thông tin mà mình muốn. Vậy làm thế nào để tạo được một cái parten nhanh, gọn nhưng phải đảm bảo sẽ match với chuỗi mình muốn tìm? Mình thì thường dùng regex để tìm kiếm thông tin trong 1 file hoặc nhiều file trong 1 folder hay là tìm bug trong application logs :v(Nếu các bạn muốn biết các ứng dụng hay ho hơn của regex thì có thể vô bài viết). Và mình thấy không gì giúp ta nhớ và áp dụng chính xác các rules trong regex bằng việc sử dụng nó hàng ngày 😃. Thật tuyệt khi mỗi ngày lại vọc thêm được một tí phải không nhỉ 😄 😄 😄.

Cùng mình thử giải một số match có vẻ easy này nhá 👏👏👏

1. Số và kí tự

Đề 1: ta có chuỗi dental2349nobeta7774 meta dota. Yêu cầu viết regex

a. Tìm tất cả các kí tự là số

Dễ đúng không 😃. Hãy tính xem bạn hết bn giây để viết ra được đáp án đúng nhé! (đáp án - đúng hơn là tham khảo thôi sẽ có ở cmt)

b. Chỉ tìm ra các kí tự chính xác là eta, nta

Lần này chắc nghĩ lâu hơn vài giây chứ nhỉ :v, chú ý câu hỏi nhé. và tương tự như trên hãy cmt đáp án xuống bên dưới hoặc hãy giữ nó trong đầu bạn 😄 😄 😄

Đề 2: 12 file found?, 21 files found?, 3 files found?, no files found Tìm các chuỗi đã tìm được files. Ở TH này y/c chuỗi trả về là

12 file found?
21 files found?
3 files found?

Việc này rất hay xảy ra khi chúng ta điều tra application logs. Vì app logs của bạn thường được lưu trong 1 file (thường lưu trong 1h) và để biết được cụ thể lỗi phát sinh ở dòng nào, lỗi như thế nào thì cách nhanh nhất là greb để show ra dòng đó. Đương nhiên là bạn phải có 1 cái keyword cho cái lỗi bạn định tìm kiếm ở trong đầu 😃. Như ví dụ ở trên là files found chẳng hạn.

Một ví dụ khác đi. Giả sử ứng dụng có chức năng upload file pdf và bạn đang không biết đường dẫn file khi lưu nằm ở đâu và chi tiết tên file như thế nào (b vào dự án khi đang maintain). log của ta có thể có những thứ như thế này

file_profile_445132.pdf
file_152000.pdf
testfile_fake.pdf.zip
testfile_2f.pdf.tmp

Đề 3: làm thế nào lấy được các file có đuôi pdf kia nhỉ? cmt nhé.

2. số thập phân

Đề 4: Tìm được tất cả các số thập phân trong list sau

3.14529
-255.34
224
1024p
1.9e10
123,340.00

Đề 5: Thêm một demo nhỏ, ta có file như sau mở bằng sublime

id,name,value,profile_id
1,nguyen van,2000$,2
2,nguyen na,2tỷ$,2
3,phong tra,1đ,3
4,lem lem,3tr,1
5,nguyen ngoan,3000nzd,4
6,nguyen trung,2000won,2
...
n,lua nhung,1001$,4

Ta muốn tìm những thằng có profile_id là 2 và bắt đầu tên với chữ nguyen thì làm thế nào ? Đầu tiên phải mở của sổ tìm kiếm bằng regex cái đã 😃 (ở góc dưới cùng bên trái). Sau đó hãy thử tìm đáp án r đến phần cmt xem đáp án tham khảo :3.

Hy vọng với chút bài tập nhỏ này mọi người sẽ tăng thêm 1điểm thông thạo Regex 😄 😄


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí