Regex trong Vi: Làm thế nào để một người sử dụng các lớp nhân vật trong các nhóm? (ví dụ: [\ s \ w])


15

Trong Vim, lớp nhân vật \skhớp với bất kỳ ký tự khoảng trắng nào. Khi tôi đang sử dụng các ký tự đặc biệt đó trong các nhóm, ví dụ như [\s\w]nó không khớp với bất kỳ khoảng trắng hoặc ký tự từ nào, nó sẽ khớp shoặc w.

Làm thế nào để một người sử dụng các lớp nhân vật trong các nhóm?


8
Không giống như một số triển khai của các công cụ biểu thức chính quy, Vim dường như không hỗ trợ ký hiệu đó. [[:space:][:alnum:]_]có thể được sử dụng để ước tính bộ sưu tập \s\w, mặc dù.
Peter Lewerin

@PeterLewerin Vui lòng gửi câu trả lời.
Christopher Bottoms

@ChristopherBottoms: xong.
Peter Lewerin

Câu trả lời:


11

Đó không phải là một nhóm, đó là một phạm vi và trong Vim, bạn không thể sử dụng các lớp ký tự (mặc dù có thể trong các triển khai regex khác, ví dụ như trong python ). Thay vào đó, bạn sẽ phải sử dụng thay thế:

/\(\w\|\s\)

hoặc là:

/\v(\s|\w)

(hoặc, giải pháp được đề xuất bởi Peter Lewerin ).


2
Chỉ vì người ta có thể xây dựng một phạm vi không hợp lệ trong một lớp nhân vật không có nghĩa là không thể sử dụng cái gì đó giống như \strong một lớp nhân vật. Triển khai regex của Vim tình cờ đã đưa ra lựa chọn đó, nhưng các triển khai khác cho phép bạn sử dụng [\s].
jamessan

@VanLaser Nếu bạn chỉnh sửa câu trả lời với thông tin này ([\ s] là có khả năng trong các triển khai regex khác nhưng không phải trong vim) tôi sẽ chấp nhận câu trả lời của bạn!
John HK

(được rồi, đã thêm)
VanLaser

11

Không giống như một số triển khai của các công cụ biểu thức chính quy, Vim dường như không hỗ trợ ký hiệu đó ( [\s\w]) trong các bộ sưu tập. Tuy nhiên, người ta có thể sử dụng các biểu thức lớp ký tự POSIX .

  • [:blank:]cũng giống như \s.
  • [:space:]phù hợp với số lượng ký tự khoảng trắng lớn hơn so với \svà có vẻ tương đương với \_s.
  • [:alnum:]gần đúng \w, nhưng không khớp với dấu gạch dưới ( _).

Vì vậy, bộ sưu tập bạn muốn có thể được viết là [[:blank:][:alnum:]_]hoặc [[:space:][:alnum:]_].

Tôi đã không xác nhận điều này bằng cách thử nghiệm, nhưng nó được ghi lại trong :h regexp, :h /character-classes:h /collection.

Lưu ý về tính di động: Trong các công cụ regex khác, \sthường giống như [:space:](hoặc \_s) trong Vim.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.