Bài học theo mô-đun (3/4)
Ký tự đại diện: dấu chấm `.`
dấu chấm . trong biểu thức chính quy là ký tự đại diện: nó khớp với bất kỳ ký tự đơn nào
ký tự\u2026 với một ngoại lệ quan trọng: nó KHÔNG khớp với
dòng mới (\n).
Pattern: c.t
Sample: cat cot cut c@t c\nt
^^^ ^^^ ^^^ ^^^Ba chữ cái: a c, ký tự bất kỳ, a t. Không có dòng mới ở giữa, vì vậy c\nt
không khớp (theo mặc định).
Dấu chấm cực kỳ hữu ích nhưng cũng nguy hiểm: sử dụng mà không có kỷ luật
thu được nhiều hơn bạn dự định. Kết hợp với các bộ định lượng ở học phần 2
(.*, .+?) đó là nguồn gốc của 90% mẫu "không hoạt động theo cách tôi
dự kiến".
Cờ s: "dotAll"
Với cờ s (còn được gọi là dotAll hoặc single-line), dấu chấm khớp với
mọi ký tự, bao gồm cả dòng mới. Hữu ích để trích xuất các khối trải dài
nhiều dòng.
Pattern: <p>.*</p>
Flag: gs
Sample: <p>prima\nseconda</p>
^^^^^^^^^^^^^^^^^^^^^Giới hạn và hành vi của ký tự đại diện dấu chấm
Dấu chấm . là ký tự đại diện mạnh nhưng theo mặc định dấu chấm này không khớp với các ký tự dòng mới (\\n). Nếu bạn muốn dấu chấm hoàn toàn khớp với mọi thứ, kể cả dòng mới, bạn phải bật cờ s (dotAll). Hãy cẩn thận khi kết hợp dấu chấm với số lượng hóa (.*), vì nó có xu hướng tiêu thụ quá nhiều văn bản (hành vi tham lam).
Hãy thử nó
Tìm mọi bộ ba ký tự được phân cách bằng dấu ngoặc đơn, ví dụ: `(abc)`, `(xyz)`. Sử dụng ký tự đại diện cho 3 ký tự bên trong.
Hiển thị gợi ý
Ba dấu chấm cho ba ký tự tùy ý. Dấu ngoặc đơn là các ký tự meta: chúng phải được thoát bằng \\.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Trích xuất khối giữa `[INIZIO]` và `[FINE]`, khối này có thể trải dài trên nhiều dòng. Bạn sẽ cần cờ `s` để dấu chấm cũng khớp với dòng mới và phiên bản 'lười biếng' của bộ định lượng (`.*?`, mô-đun 2).
Hiển thị gợi ý
Không có cờ s, dấu chấm dừng ở cuối dòng: thêm nó vào. Biểu mẫu .*? (lười biếng) dừng trận đấu ở [FINE] đầu tiên.
Giải pháp khả dụng sau 3 lần thử
Thử thách bổ sung
Find all 3-character sequences starting with `c` and ending with `t` (e.g. `cat`, `cot`, `c-t`).
Hiển thị gợi ý
Mẫu sử dụng dấu chấm '.' để đại diện cho ký tự đại diện ở giữa.
Giải pháp khả dụng sau 3 lần thử