Note về Regex
TIL
499
regex
13
White

Manh Truong Tuan viết ngày 19/10/2016

Note về Regex

Tổng hợp lại những kiến thức cơ bản về Regex mà mình đã được thực hành tại regexone.com

Tìm kiếm đúng một chuỗi

Cách này gần như là không tận dụng chút ưu việt nào của regex, đơn giản tìm xem có chuỗi con nào trong chuỗi
cần xử lý hay không

  • Ví dụ : với chuỗi regex là /abc/ như trên, "abcde" --> True, "abc" --> True, "ab" --> False

Tìm chữ số: \d

Bắt đầu tận dụng chút ma thuật của regex, bạn dùng ký tự '/d' để đại diện cho 1 chữ sô.
Tìm 1 chữ số thì search bằng '\d', tìm hai chữ thì search bằng '/d/d'

  • regex để tìm 1 chữ số là : \d
  • Ví dụ :
    • Với regex là \d thì chuỗi "abc" --> False, "1ba" -> True
    • với regex là \d\d thì chuỗi "1ab" --> False, "ab" --> False nốt, "12b" --> True

Tìm một ký tự bất kỳ: .

Dùng ký tự '.' để đại diện cho 1 ký tự bắt bất kỳ ( chữ cái, số, ký tự đặc biệt bao gồm cả '.' ),
tìm bao nhiêu ký tự thì cho bấy nhiêu '.'
Trong trường hợp muốn tìm chính xác ký tự '.' trong chuỗi, hãy dùng regex '\.'

Ví dụ : với regex là /.../ sẽ tìm chuỗi có 3 ký tự bất kỳ, do đó "ab" --> False, "abc"--> True

Tìm một trong cách ký tự cho trước: [abc]

Giả sử bạn muốn tìm 1 trong số các ký tự cho trước, bạn có thể nhóm các ký tự đấy trong các ngoặc vuông '[ ]'

Ví dụ : muốn tìm ký tự 'a' hoặc 'b' hoặc 'c', hãy dùng chuỗi regex "[abc]"

  • Chuỗi đầu vào "a2312" --> True, "b324" --> True, "c2343" --> True
  • "213123" --> False

Muốn tìm 1 chữ cái có thể dùng [a-z], 1 chữ số có thể dùng [0-9],

Loại trừ một nhóm ký tự: [^abc]

Trường hợp bạn muốn loại bỏ không tìm 1 nhóm ký tự nào đó, bạn nhóm các ký tự đó vào trong '[^]

Ví dụ: loại bỏ cả 'a', 'b', 'c', dùng chỗi regex [^abc]

  • Chuỗi đầu vào "a2312" --> False, "b324" --> False, "c2343" --> False
  • "213123" --> True

Tìm 1 chữ cái hoặc chữ số : \w

Ký tự \w đại diện cho 1 chữ số hoặc 1 chữ cái

Tìm nhiều (m lần) ký tự giống nhau liên tiếp

Ở các mục trc, tất cả các chuỗi regex đều dùng cho tìm ra 1 ký tự.
Để tìm nhiều ký tự thì ta thêm chuỗi {m} vào sau chuỗi cần tìm kiếm trong đó m là số lần lắp lại.
Để tìm số lần lắp trong 1 khoảng nào đó thì dùng {m,n} nghĩa là lắp từ m đến n lần

Ví dụ : chuỗi regex "waz{5}p" sẽ trả về đúng cho bất kỳ chuỗi nào chứa chuỗi con wazzzzzp
Chuỗi waz{3,5}p sẽ có tác dụng sau

  • "wazp" --> False
  • "wazzzp" --> True
  • "wazzzzp" --> False

Tìm ký tự lặp lại nhiều lần (tiếp)

Ta có thể dùng ký tự * sau ký tự cần tìm để mô tả cần tiếp chuỗi liên tiếp các ký tự đó với số lượng ít nhất là 0

Ví dụ : regex là "a*b*c" sẽ trả về :

  • "abc"--> true
  • "a" --> false
  • "aaaabbbc" --> true
  • "aac" --> true

Ta có thể dùng ký tự + sau ký tự cần tìm để mô tả cần tiếp chuỗi liên tiếp các ký tự đó với số lượng ít nhất là 1

Vi du : regex "a+b*c+" sẽ trả về :

  • "aaaaabcc" --> True
  • "aaabbbc" --> True
  • "a" --> False

Tìm ở ví trí bắt đầu hoặc kết thúc với ^ và $

Dùng ký tự ^ vào trước đoạn regex để tìm đoạn chuỗi ghi regex đó xuất hiện ở đầu chuỗi cần tìm
Dùng ký tự $ vào sau đoạn regex để tìm sự xuất hiện ở cuối chuỗi cần tìm.

Dùng cả ^$ nghĩa là tìm chính xác một chuỗi được mô tả bởi chuôi regex

Ví dụ : regex ^abc sẽ trả về

  • 'abcd' --> true
  • '1abc' --> False

Với regex abc$

  • 'abcd' --> false
  • '1abc' --> true

Với regex ^M.*ul$

  • 'Mission: successful' --> True
  • 'Last Mission: unsuccessful' --> False
  • 'Next Mission: successful upon capture of target' --> False

Đại diện cho dấu cách hoặc tương tự ( dấu Tab ) \s

Ký tự không phải khoảng trong \S

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Manh Truong Tuan

6 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
3 3
Sử dụng Terminal hiệu quả hơn với tmux (Link) 1. Cài đặt bash $ sudo E addaptrepository ppa:pirho/dev $ sudo aptget update $ sudo aptget install...
Manh Truong Tuan viết hơn 1 năm trước
3 3
White
1 0
Bài toán là 1 mô hình kiểu mạng xã hội đơn giản, trong đó user nhấn vào 1 nút Add friend hoặc Follow để cho 1 user khác vào danh sách theo dõi ( để...
Manh Truong Tuan viết hơn 1 năm trước
1 0
Bài viết liên quan
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 7 tháng trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
2 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!