Chuyển đến nội dung chính
Mô-đun 6 · Bài học 1 trong tổng số 421/32 trong khóa học~10 min
Bài học theo mô-đun (1/4)

Cái nhìn tích cực: `(?=...)`

Cái nhìn tích cực (?=...) là một xác nhận có độ rộng bằng 0: nó kiểm tra xem một mẫu nhất định có tuân theo vị trí hiện tại không, nhưng không không tiêu thụ những ký tự đó.

Code
Pattern: \d+(?= euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                ^^^                 ^^

Phần nhìn trước (?= euro) yêu cầu các chữ số phải được theo sau bởi euro, nhưng trận đấu chỉ bao gồm các chữ số. 75 dollari không khớp (không có euro).

Tại sao "không có chiều rộng"

Hãy coi giao diện phía trước như một điều kiện đối với vị trí, không phải là một một phần của trận đấu:

  • Trận đấu dừng trước phần nhìn về phía trước.
  • Vị trí “sau trận đấu” là vị trí bắt đầu của văn bản được lookahead kiểm tra.
  • Trận đấu tiếp theo với cờ g sẽ tiếp tục từ đó.

Điều này làm cho nó trở nên hoàn hảo để trích xuất các giá trị mà không cần ngữ cảnh của chúng: giá cả không có tiền tệ, các từ trước dấu chấm câu, v.v.

Tính năng tra cứu và quét độ rộng bằng 0

Chế độ xem trước tích cực (?=...) đảm bảo rằng mẫu được chỉ định tuân theo điểm hiện tại nhưng quá trình quét sẽ tiếp tục từ vị trí trước chế độ xem trước. Điều này ngăn chặn việc "tiêu thụ" các phần văn bản có thể cần thiết cho các kết quả khớp tiếp theo.

Hãy thử nó

tập thể dục#regex.m6.l1.e1
Nỗ lực: 0Đang tải…

CHỈ trích xuất các chữ số của giá đồng euro (chuỗi các chữ số theo sau là ' euro'). Không có tiền tệ trong trận đấu.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Di chuyển ' euro' bên trong một cái nhìn về phía trước (?= euro): chuỗi sẽ không phải là một phần của kết quả khớp.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#regex.m6.l1.e2
Nỗ lực: 0Đang tải…

Tìm mọi từ ngay sau đó là dấu hai chấm `:` (nhưng không bao gồm dấu hai chấm trong kết quả khớp).

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Logic tương tự: `:` không khớp, nhưng đó là điều kiện vị trí.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#regex.m6.l1.e3
Nỗ lực: 0Đang tải…

Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Di chuyển \\( (thoát khỏi dấu ngoặc đơn mở) bên trong phần nhìn tích cực (?=...).

Giải pháp khả dụng sau 3 lần thử