Regex để phù hợp với một nhân vật dòng mới là gì?


21

Trong regac Emacs, \nkhông khớp với một ký tự dòng mới \n.

  1. Tôi có đúng không, $phù hợp với vị trí giữa một ký tự dòng mới và ký tự ngay trước ký tự dòng mới. ví dụ cho một chuỗi abc\n, $phù hợp với vị trí giữa c\n?
  2. Regex phù hợp với những \ngì?

2
Bạn có thể cung cấp một ví dụ làm việc tối thiểu? Có lẽ tôi đang thiếu một cái gì đó, nhưng (re-search-forward "\n")làm việc tốt cho tôi.
Dan

1
Tệp của bạn có thể sử dụng \ r \ n cho các dòng mới và có thể là bạn cần đưa \ r vào biểu thức chính quy của mình, vì vậy abc\r\nthay vì abc\n.
Jordon Biondo

@Dan: CM và Mx xảy ra cả hai khớp \nvới n. bộ đệm của tôi ở chế độ cơ bản. Điều này xảy ra với bất kỳ văn bản nào, vì vậy, bất kỳ văn bản nào có dòng hoặc thư mới nlà một ví dụ hoạt động
Tim

@Jordon: CM và Mx xảy ra cả hai trận đấu \r\nvớirn
Tim

@Tim, có bởi vì nếu bạn nhập chúng một cách tương tác, bạn cần thực hiện một phần chèn được trích dẫn, Cq Cm và Cq Cj tương ứng. Bạn có thể nhập \ r \ n nếu bạn nhập chúng vào một chuỗi lisp.
Jordon Biondo

Câu trả lời:


19
  1. Đúng. $khớp với cuối dòng , không phải là ký tự dòng mới xuất hiện sau cuối dòng.
  2. Làm C-M-s C-q C-j. C-qlà ràng buộc mặc định cho quoted-insertvà cũng hoạt động trong bộ thu nhỏ. Biểu thức này theo nghĩa đen tìm kiếm một dòng mới : C-j.

1
2. bạn có nói rằng ký tự dòng mới không thể được biểu diễn dưới dạng một chuỗi thoát trong biểu thức chính của Emacs không?
Tim

3
Cho dù tìm kiếm một dòng mới tương tác hoặc qua elisp (ví dụ (looking-at "^J")nơi ^ J được chèn bằng C-q C-j), các C-q C-jphương pháp luôn luôn hoạt động. Nhưng khi sử dụng các chức năng elisp giống như các looking-at \ncông việc tương tự ; M-: (looking-at "\n") RETsẽ trở thành đúng nếu con trỏ ở cuối dòng (và sau đó có một dòng mới).
Kaushal Modi

2
Chỉ cần đề cập, nếu sử dụng regexp-builder, bạn có thể nhận ra một dòng mới với [\n].
Nsukami _

@Nsukami_: CM và Mx xảy ra cả hai khớp [\n]với n.
Tim

13

Như Dan nhận xét, regex phù hợp với một dòng mới một dòng mới.

Bạn có thể đại diện cho một dòng mới trong một chuỗi trích dẫn trong elisp như "\n". Không có cú pháp cụ thể cụ thể bổ sung nào cho việc này - bạn chỉ cần sử dụng một dòng mới, giống hệt như bất kỳ ký tự chữ nào khác.

Nếu bạn đang nhập một biểu thức chính quy tương tác thì bạn có thể chèn dòng mới với C-qC-j, như câu trả lời của kaushalmodi chỉ ra.


1
Cảm ơn! Trong emacs (không phải trong elisp), Cq Cj có phải là cách duy nhất để khớp với một ký tự dòng mới không? \nkhông khớp với một ký tự dòng mới.
Tim

1
Đúng. Chà, cụ thể hơn, gõ một dòng mới là cách duy nhất để khớp với một ký tự dòng mới khi nhập một biểu thức chính quy (vì không có trình tự thoát regrec cho một dòng mới) và C-q C-jlà cách đáng tin cậy nhất để nhập một dòng mới theo dấu nhắc.
phils
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.