Apa regex yang cocok dengan karakter baris baru?

22

Di Emacs regex, \ntidak cocok dengan karakter baris baru \n.

  1. Apakah saya benar yang $cocok dengan posisi antara karakter baris baru dan karakter tepat sebelum karakter baris baru. misalnya untuk string abc\n, $cocok dengan posisi antara cdan \n?
  2. Apa regex yang cocok \n?
StackExchange untuk Semua
sumber
2
Bisakah Anda memberikan contoh kerja minimum? Mungkin saya kehilangan sesuatu, tetapi (re-search-forward "\n")bekerja dengan baik untuk saya.
Dan
1
File Anda mungkin menggunakan \ r \ n untuk baris baru dan mungkin Anda perlu memasukkan \ r di regexp Anda, jadi abc\r\nalih-alih abc\n.
Jordon Biondo
@ Dan: CM dan Mx terjadi baik pertandingan \nke n. buffer saya dalam mode Fundamental. Ini terjadi pada teks apa pun, jadi teks apa pun dengan baris atau huruf baru nadalah contoh yang berfungsi
StackExchange for All
@Jordon: CMs dan Mx terjadi keduanya cocok \r\nuntukrn
StackExchange untuk Semua
@Tim, ya karena jika Anda memasukkannya secara interaktif, Anda harus melakukan sisipan yang dikutip, Cq Cm, dan Cq Cj. Anda dapat memasukkan \ r \ n jika Anda memasukkannya ke dalam string lisp.
Jordon Biondo

Jawaban:

19
  1. Iya. $cocok dengan akhir baris , bukan karakter baris baru yang muncul setelah akhir baris.
  2. Lakukan C-M-s C-q C-j. C-qadalah pengikatan default untuk quoted-insertdan berfungsi di minibuffer juga. Ungkapan ini secara harfiah mencari baris baru: C-j.
Kaushal Modi
sumber
1
2. Apakah Anda mengatakan karakter baris baru tidak dapat direpresentasikan sebagai urutan pelarian di Emacs regex?
StackExchange for All
3
Apakah mencari baris baru secara interaktif atau melalui elisp (misalnya di (looking-at "^J")mana ^ J dimasukkan oleh C-q C-j), C-q C-jpendekatan selalu bekerja. Tetapi ketika menggunakan fungsi elisp seperti looking-at \nbekerja juga sama ; M-: (looking-at "\n") RETakan bernilai true jika kursor berada di akhir baris (dan ada baris baru setelah itu).
Kaushal Modi
2
Sebagai tambahan, jika menggunakan regexp-builder, Anda dapat mengenali baris baru dengan [\n].
Nsukami _
@Nsukami_: CM dan Mx terjadi baik pertandingan [\n]ke n.
StackExchange for All
13

Seperti komentar Dan, regex yang cocok dengan baris baru adalah baris baru.

Anda bisa mewakili baris baru dalam string yang dikutip di elisp sebagai "\n". Tidak ada sintaks khusus regexp khusus untuk ini - Anda hanya menggunakan baris baru, persis seperti karakter literal lainnya.

Jika Anda memasukkan regexp secara interaktif maka Anda dapat memasukkan baris baru C-qC-j, seperti yang ditunjukkan oleh jawaban kaushalmodi.

phils
sumber
1
Terima kasih! Dalam emacs (bukan di elisp), apakah Cq Cj satu-satunya cara untuk mencocokkan karakter baris baru? \ntidak cocok dengan karakter baris baru.
StackExchange for All
1
Iya. Nah, lebih khusus lagi, mengetik baris baru adalah satu-satunya cara untuk mencocokkan karakter baris baru saat memasukkan regexp secara interaktif (karena tidak ada urutan escape regexp untuk baris baru), dan C-q C-jmerupakan cara yang paling dapat diandalkan untuk mengetik baris baru pada prompt.
phils