regex เพื่อจับคู่อักขระขึ้นบรรทัดใหม่คืออะไร


22

ใน Emacs regex, ไม่ตรงกับตัวอักษรบรรทัดใหม่\n\n

  1. ฉันถูกต้องที่$ตรงกับตำแหน่งระหว่างตัวละครขึ้นบรรทัดใหม่และตัวละครตรงหน้าตัวละครบรรทัดใหม่ เช่นสำหรับสตริงabc\n, $ตรงกับตำแหน่งระหว่างcและ \n?
  2. regex นั้นตรงกับ\nอะไร?

2
คุณช่วยยกตัวอย่างการทำงานขั้นต่ำได้ไหม บางทีฉันอาจจะพลาดบางอย่าง แต่ใช้(re-search-forward "\n")งานได้ดีสำหรับฉัน
ด่าน

1
ไฟล์ของคุณอาจใช้ \ r \ n สำหรับสายใหม่และมันอาจเป็นไปได้ว่าคุณต้องรวม \ r ใน regexp ของคุณเพื่อให้แทนabc\r\n abc\n
Jordon Biondo

@Dan: cms และ Mx เกิดขึ้นได้ทั้งการแข่งขันไป\n nบัฟเฟอร์ของฉันอยู่ในโหมดพื้นฐาน สิ่งนี้เกิดขึ้นกับข้อความใด ๆ ดังนั้นข้อความใด ๆ ที่มีบรรทัดใหม่หรือตัวอักษรnเป็นตัวอย่างการทำงาน
StackExchange สำหรับ All

@Jordon: CM และ Mx เกิดขึ้นทั้งคู่ตรง\r\nกับrn
StackExchange สำหรับ All

@Tim ใช่เพราะถ้าคุณป้อนพวกเขาแบบโต้ตอบคุณจะต้องแทรกใบเสนอราคา Cq Cm และ Cq Cj ตามลำดับ คุณสามารถป้อน \ r \ n หากคุณป้อนพวกเขาลงในสตริงเสียงกระเพื่อม
Jordon Biondo

คำตอบ:


19
  1. ใช่. $ตรงกับจุดสิ้นสุดของบรรทัดไม่ใช่อักขระขึ้นบรรทัดใหม่ซึ่งมาหลังจุดสิ้นสุดของบรรทัด
  2. C-M-s C-q C-jDo C-qเป็นค่าเริ่มต้นที่มีผลผูกพันquoted-insertและทำงานใน minibuffer เช่นกัน C-jสำนวนนี้แท้จริงค้นหาบรรทัดใหม่:

1
2. คุณกำลังพูดว่าอักขระบรรทัดใหม่ไม่สามารถแสดงเป็นลำดับ escape ใน Emacs regex ได้หรือไม่?
StackExchange สำหรับทุก

3
ไม่ว่าจะค้นหาบรรทัดใหม่แบบโต้ตอบหรือผ่าน elisp (เช่น(looking-at "^J")ที่แทรก^ Jด้วยC-q C-j) C-q C-jวิธีการนี้จะใช้งานได้ทุกครั้ง แต่เมื่อใช้ฟังก์ชั่น elisp เช่นเดียวกันlooking-at \nก็ทำงานเหมือนกัน; M-: (looking-at "\n") RETจะกลายเป็นจริงหากเคอร์เซอร์อยู่ที่ท้ายบรรทัด (และมีการขึ้นบรรทัดใหม่หลังจากนั้น)
Kaushal Modi

2
เพียงแค่พูดถึงถ้าใช้คุณจะสามารถที่จะรับรู้บรรทัดใหม่ด้วยregexp-builder [\n]
Nsukami _

@Nsukami_: cms และ Mx เกิดขึ้นได้ทั้งการแข่งขันไป[\n] n
StackExchange สำหรับทั้งหมด

13

ในฐานะที่เป็นความคิดเห็นของแดน regex ที่ตรงกับขึ้นบรรทัดใหม่จะขึ้นบรรทัดใหม่

คุณสามารถเป็นตัวแทนของการขึ้นบรรทัดใหม่ในสายยกใน Elisp "\n"เป็น ไม่มีไวยากรณ์เฉพาะ regexp เฉพาะเพิ่มเติมสำหรับเรื่องนี้ - คุณเพียงแค่ใช้การขึ้นบรรทัดใหม่เหมือนกับอักขระตัวอักษรอื่น ๆ

หากคุณกำลังป้อน regexp แบบโต้ตอบคุณสามารถแทรกขึ้นบรรทัดใหม่ด้วยC-qC-jเนื่องจากคำตอบของ kaushalmodi ชี้ให้เห็น


1
ขอบคุณ! ใน emacs (ไม่ใช่ elisp) Cq Cj เป็นวิธีเดียวที่จะจับคู่อักขระบรรทัดใหม่หรือไม่ \nไม่ตรงกับอักขระบรรทัดใหม่
StackExchange สำหรับทุก

1
ใช่. โดยเฉพาะอย่างยิ่งการพิมพ์ newlineเป็นวิธีเดียวที่จะจับคู่อักขระขึ้นบรรทัดใหม่เมื่อป้อน regexp แบบโต้ตอบ (เนื่องจากไม่มีลำดับ escape ของ regexp สำหรับการขึ้นบรรทัดใหม่) และC-q C-jเป็นวิธีที่เชื่อถือได้มากที่สุดในการพิมพ์ newline ที่พร้อมท์
phils
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.