Elex regexps ^ và $ vs `và '


16

Hướng dẫn mô tả các ký tự đặc biệt regrec ^$. Giống như trong hầu hết các phương ngữ biểu thức chính quy mà tôi biết, chúng dường như khớp với điểm bắt đầu hoặc kết thúc của một chuỗi. Tuy nhiên, tôi cũng đã phát hiện ra rằng có `và các 'ký tự có sẵn. Dựa trên lời giải thích được tìm thấy ở đây , chúng dường như cũng khớp với điểm bắt đầu hoặc kết thúc của chuỗi. Ai đó có thể vui lòng giải thích sự khác biệt giữa các ký tự đặc biệt này, với một ví dụ và khuyến nghị về thời điểm sử dụng chúng?

Khi tôi nhìn vào giá trị của auto-mode-alist, chúng dường như được sử dụng thay thế cho nhau để khớp với phần cuối của chuỗi:

(...
 ("\\.scss\\'" . scss-mode)
 ("\\.ya?ml$" . yaml-mode)
...)

2
Khi mọi người sử dụng $như vậy, họ đang ngân hàng trên tên tệp không chứa dòng mới. Điều này thường sẽ là một giả định (rất) an toàn, nhưng nó không được bảo đảm . \\'Do đó sử dụng là thực hành tốt nhất.
phils

Câu trả lời:


14

Chuỗi của bạn có thể có một ký tự dòng mới được nhúng, trong trường hợp này \'khớp với phần cuối của chuỗi nhưng $khớp ngay trước ký tự dòng mới.

Để trích dẫn hướng dẫn Elisp, nút RegEx Special :

Khi khớp chuỗi thay vì bộ đệm, `$ 'khớp ở cuối chuỗi hoặc trước ký tự dòng mới.

Tương tự, \`khớp với phần đầu của chuỗi, nhưng ^khớp ngay sau char dòng mới. Một lần nữa, hướng dẫn:

Khi khớp chuỗi thay vì bộ đệm, `^ 'khớp ở đầu chuỗi hoặc sau ký tự dòng mới.

Vì vậy, đối với các chuỗi bạn thường muốn sử dụng \`\'đặc biệt là nếu mã của bạn không thể biết trước liệu có thể có các ký tự dòng mới trong chuỗi hay không. Đối với văn bản trong bộ đệm bạn thường sử dụng ^$.


6
(string-match "^foo" "foo")         ; => 0
(string-match "\\`foo" "foo")       ; => 0
(string-match "^foo" "bar\nfoo")    ; => 4
(string-match "\\`foo" "bar\nfoo")  ; => nil

(string-match "foo$" "foo")         ; => 0
(string-match "foo\\'" "foo")       ; => 0
(string-match "foo$" "foo\nbar")    ; => 0
(string-match "foo\\'" "foo\nbar")  ; => nil

^$phù hợp với điểm bắt đầu và kết thúc của dòng .

\`\'khớp với điểm bắt đầu và kết thúc của toàn bộ chuỗi .


2
there are ` and ' characters available. [...] they seem to also match the start or end of strings

Các ký tự đặc biệt là : . * + ? ^ $ \ [.

Giữa các dấu ngoặc [], sau đây cũng đặc biệt:] - ^

Nhiều ký tự bao gồm backtick `và một trích dẫn 'trở nên đặc biệt khi chúng theo dấu gạch chéo ngược. Xem ở đây để biết thêm chi tiết.

Could someone please explain the difference between these special characters, with an example and recommendation on when to use them?

Có một sự khác biệt giữa beginning of string, và beginning of each line in the string.

Phép lịch sự của Ergoemacs. Bạn có thể đọc thêm ở đây

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.