Tên của mã thông báo '\%' và '\ @' trong vex regex là gì? Và nó làm gì?


10

Trong khi chỉnh sửa tệp cú pháp, tôi tìm thấy một cái gì đó như:

\s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$

Tôi quen thuộc với bất kỳ ai khác \%\@ở đó. Tôi thậm chí không thể googling vì tôi không biết tên của nó là gì. Vậy nó là gì và nó làm gì?

Câu trả lời:


14

Trước khi googling, hãy thử tài liệu:

Từ :h \%

\%(\)   A pattern enclosed by escaped parentheses.
    Just like \(\), but without counting it as a sub-expression.  This
    allows using more groups and it's a little bit faster.
    {not in Vi}

:h \@<!

\@<!    Matches with zero width if the preceding atom does NOT match just
    before what follows.  Thus this matches if there is no position in the
    current or previous line where the atom matches such that it ends just
    before what follows.

    Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
    The match with the preceding atom is made to end just before the match
    with what follows, thus an atom that ends in ".*" will work.
    Warning: This can be slow (because many positions need to be checked
    for a match).  Use a limit if you can, see below.

    Example         matches ~

    \(foo\)\@<!bar      any "bar" that's not in "foobar"

    \(\/\/.*\)\@<!in    "in" which is not after "//"

1
Ah, tôi không biết rằng :helpcó thể chấp nhận mô hình như là đối số. Đó là thông tin rất có giá trị. Nhân tiện, nó không có tên, phải không?
Mas Bagol

1
Nó không chính xác chấp nhận mô hình như đối số: pattern.txttập tin có chủ đề về các mặt hàng này do đó họ có một thẻ trợ giúp liên kết ( /\%(\)hoặc /\%(hoặc E53cho người đầu tiên và /\@<!cho một giây) và các thẻ có thể được sử dụng như các đối số của :h. Bây giờ về tên của họ, tôi muốn nói rằng chúng được gọi là các nguyên tử giống như ^hoặc ., nhưng tôi không chắc chắn 100%.
statox

4
@statox Nó không chấp nhận chính xác các mẫu làm đối số - Chà, đó là những gì :helpgrepdành cho. :)
lcd047

@ lcd047 Chết tiệt làm sao tôi quên được lệnh này?! Cảm ơn lời nhắc hữu ích này :)
statox

1
Trang web này đôi khi có xu hướng làm tôi ngạc nhiên: Hiện tại tôi đã thực hiện 170 câu trả lời và đây là câu trả lời nhiều thứ 6 trong khi nó chỉ chứa hai trích dẫn dễ tìm của tài liệu trong khi tôi có câu trả lời khác với mã vimscript hoặc cách nhận ra các hành động phức tạp hơn. .. Tôi không hiểu tại sao cái này lại "thành công" như vậy
statox
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.