คำถามติดแท็ก regular-expressions

สำหรับรูปแบบที่ระบุการค้นหาหรือแทนที่สตริง หรือที่เรียกว่า "regex" หรือ "regexp" โดยรูปแบบจะอธิบายถึงสตริงที่จะจับคู่เมื่อค้นหาหรือแทนที่ Emacs ให้การสนับสนุนรูปแบบ "regex" ในหลายคำสั่ง Emacs ยังมีเครื่องมือสร้างนิพจน์แบบโต้ตอบสำหรับรูปแบบดังกล่าว

2
การทำความเข้าใจกับ emacs align-regexp
ฉันอ่านเอกสาร Emacs แล้วalign-regexpแต่ยังคงมีปัญหาในการทำความเข้าใจวิธีการทำงาน สิ่งที่ผมพูดเกี่ยวกับการเป็นรูปแบบนำหน้ามันไม่ได้แบบง่ายๆC-uM-xalign-regexp M-xalign-regexpนี่คือคำถามของฉัน: พารามิเตอร์แรก (regex) ต้องจับคู่กับสตริงทั้งหมดหรือไม่ จะเกิดอะไรขึ้นถ้า regex จับคู่กับส่วนของสตริงเท่านั้น? สิ่งที่จะจัดหาให้กับพารามิเตอร์ที่สอง (กลุ่มวงเล็บเพื่อแก้ไข (จัดชิดถ้าลบ)) ตามที่ฉันเข้าใจที่นี่ฉันต้องระบุหมายเลขกลุ่มที่ถูกจับ (นับจาก 1) ใช่ไหม "ปรับว่าลบหรือไม่" หมายความว่าถ้าฉันต้องการจัดกลุ่ม 3 ให้ชิดขวาฉันจะส่ง-3เป็นอินพุตหรือไม่ พารามิเตอร์ที่สาม "จำนวนระยะห่าง (หรือคอลัมน์ถ้าลบ)" หมายถึงอะไร ฉันแค่ไม่เข้าใจว่าพารามิเตอร์นี้ทำอะไร ฉันรวบรวมตัวอย่างข้อความเพื่อฝึกฝน หากใครสามารถใช้ข้อความด้านล่างเป็นตัวอย่างที่จะเป็นประโยชน์มาก จาก class CreateStudents < ActiveRecord::Migration def change create_table :students, :comment => "学生信息表" do |t| t.string :political_status, :comment => "政治面貌" t.string :education_level, …

1
เหตุใดนิพจน์ทั่วไปที่สร้างด้วยตัวสร้าง regex ใช้ไวยากรณ์ต่างจากนิพจน์ทั่วไปเชิงโต้ตอบ
ดังนั้นการใช้เครื่องมือสร้างนิพจน์ทั่วไป (Mx re-builder) การค้นหาบรรทัดที่ลงท้ายด้วย \ take "\\ $" ในขณะที่ค้นหาและแทนที่ด้วย regex จะใช้เวลาเพียง "\ $" ฉันคาดว่าผู้สร้าง regex จะสร้างนิพจน์ที่ใช้งานได้โดยตรงดังนั้นสิ่งที่บัญชีสำหรับความแตกต่างนี้

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

6
รับการแข่งขัน regexp ทั้งหมดในบัฟเฟอร์เป็นรายการ
ในเว็บไซต์ Code Golf Stack Exchange วันนี้ฉันพบคำตอบนี้ใน Clojure กับคำถาม "รับลิงก์ทั้งหมดบนเว็บเพจ" (->> (slurp "http://www.stroustrup.com") (re-seq #"(?:http://)?www(?:[./#\+-]\w*)+")) หากไม่มีมาโครสุดหรูมันก็แค่นี้: (re-seq #"(?:http://)?www(?:[./#\+-]\w*)+" (slurp "http://www.stroustrup.com")) ส่งคืนรายการ: ("http://www.morganstanley.com/" "http://www.cs.columbia.edu/" "http://www.cse.tamu.edu" ...) ฉันสามารถทำสิ่งที่คล้ายกันใน Emacs Lisp ได้หรือไม่ บางทีฟังก์ชั่นเช่น(re-seq regexp (buffer-string))นั้นกลับมาแล้ว'(firstmatch secondmatch thirdmatch ...)?

3
Elisp regexps ^ และ $ vs `และ '
คู่มืออธิบายตัวละคร regexp พิเศษและ^ $เช่นเดียวกับในภาษาถิ่นปกติส่วนใหญ่ฉันรู้ว่าพวกเขาดูเหมือนจะตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของสตริง อย่างไรก็ตามฉันยังค้นพบว่ามี`และ'ตัวละครที่ใช้ได้ จากคำอธิบายที่พบที่นี่พวกเขาดูเหมือนจะตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของสตริง ใครช่วยอธิบายความแตกต่างระหว่างตัวละครพิเศษเหล่านี้พร้อมตัวอย่างและคำแนะนำในการใช้เมื่อไหร่? เมื่อฉันดูค่าของauto-mode-alistพวกเขาดูเหมือนจะใช้แทนกันเพื่อให้ตรงกับจุดสิ้นสุดของสตริง: (... ("\\.scss\\'" . scss-mode) ("\\.ya?ml$" . yaml-mode) ...)

1
ฉันจะสร้าง regexp แบบไดนามิกด้วย rx ได้อย่างไร
ฉันต้องการใช้rxในการสร้างการแสดงออกปกติด้วยค่ารันไทม์ ขณะนี้ฉันกำลังทำสิ่งนี้: (setq strings '("foo" "bar" "baz")) (eval `(rx symbol-start (or ,@strings) symbol-end)) evalแต่ผมอยากจะหลีกเลี่ยงการใช้ ฉันได้พบrx-to-stringแต่มันไม่ชัดเจนสิ่งที่ฉันควรเขียนแบบฟอร์ม: ;; error: Unknown rx form `symbol-start (rx-to-string '(symbol-start (or ,@strings) symbol-end)) ฉันจะสร้างการrxแสดงออกที่รันไทม์ได้อย่างไร

2
ฉันจะทดสอบและใช้นิพจน์ปกติของ Perl แบบโต้ตอบได้อย่างไร
สมมติว่าฉันมีบัฟเฟอร์พร้อมข้อความ ฉันต้องการทดสอบการแสดงออกปกติ (ประเภท Perl นึกคิด) กับบัฟเฟอร์ของฉันและมี Emacs เน้นการแข่งขันในนั้น ตัวอย่างเช่น regexp ต่อไปนี้ ( นำมาจาก Wikipedia ): (?<=\.) {2,}(?=[A-Z]) จะจับคู่ดังต่อไปนี้ในข้อความต่อไปนี้: การแสดงออกปกตินี้โดยเฉพาะอย่างยิ่งการจับคู่อย่างน้อยสองช่องว่างที่เกิดขึ้นหลังจากระยะเวลา(.)และก่อนที่ตัวอักษรตัวพิมพ์ใหญ่ Emacs จัดเตรียมmatcher นิพจน์ปกติเชิงโต้ตอบสำหรับนิพจน์ปกติของPerlหรือไม่ หากคำตอบของคำตอบคือไม่ใช่: มีเหตุผลที่สนับสนุนพื้นเมืองของการแสดงออกปกติPerlไม่ได้ (เคย) พิจารณาใน Emacs? (พิจารณาว่าเป็นมาตรฐานที่รู้จักกันดีใน Unix / Linux) วิธีการหนึ่งสามารถดำเนินการเกี่ยวกับการสร้างหนึ่ง matcher Perl regexp เช่น? (อาจจะเรียก Perl ภายใต้ประทุนหรือก่อนการแปลง regexp Perl เป็นตัวแปรที่สนับสนุน?)


3
มีเทียบเท่ากับคำสั่งทดแทนสไตล์ sed จากเสียงเรียกเข้า?
สิ่งหนึ่งที่ฉันพลาดจากเสียงเรียกเข้าคือสามารถพิมพ์คำสั่งการแทนที่ที่จะทำงานผ่านหลายบรรทัดตัวอย่างเช่น: :/begin/,/end/s/foo/bar/g คำสั่งดังกล่าวใช้แทน "foo" สำหรับ "bar" ที่ขึ้นต้นด้วยบรรทัดแรกที่มี "start" และลงท้ายด้วยบรรทัดถัดไปหลังจากนั้นจะมี "end" มีวิธีการทำสิ่งที่คล้ายกันใน emacs หรือไม่?

7
ฉันจะฝึกการค้นหาและแทนที่ด้วยนิพจน์ทั่วไปแบบโต้ตอบใน Emacs ได้อย่างไร
การค้นหาและแทนที่ด้วยการใช้นิพจน์ทั่วไปนั้นเป็นเครื่องมือที่ทรงพลังสำหรับผู้ใช้ Emacs ที่สามารถทำการกระทำเหล่านี้ได้เป็นประจำ อย่างไรก็ตามในฐานะผู้เริ่มต้น Emacs (และ / หรือการเขียนโปรแกรม) นิพจน์ทั่วไปจำเป็นต้องเรียนรู้และฝึกฝน ฉันสามารถเรียนรู้และฝึกอบรมนิพจน์ทั่วไปแบบโต้ตอบใน Emacs ได้เช่นเดียวกับบทช่วยสอนของ Emacs ในตัวหรือไม่ หากไม่มีคำแนะนำอื่น ๆ ในการใช้ Emacs เพื่อฝึกฝนการใช้นิพจน์ทั่วไปสำหรับการค้นหาและการแทนที่คืออะไร

2
แทนที่สตริงที่กำหนดเพิ่มขึ้น
ให้เราบอกว่าฉันมีข้อความเช่นด้านล่าง: AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) AC (NN) ตอนนี้ฉันต้องการแทนที่nnด้วยตัวเลขอย่างนั้น AC (0) AC (1) AC (2) เอซี (3) AC (4) AC (5) AC (6) AC (7) AC (8) AC (9) เอซี (10) ฉันเคยM-x replace-regexp nn RET …

1
การสนับสนุนสำหรับ regex มองไปข้างหน้าและข้างหน้า?
ฉันต้องทำการแทนที่แบบสอบถาม regex เช่นนั้น fooในfoo barคือจับคู่ แต่fooในfoo bazไม่ ปกติผมจะใช้ข้างหน้าดู regex foo(?=bar)เช่น อย่างไรก็ตามดูเหมือนว่า Emacs จะทำเช่นนี้ไม่ได้? ดูเหมือนว่าจะมีความสามารถแต่โหมดชั่วร้ายใน spacemacs ไม่สามารถทำได้

1
วิธีค้นหาคำภาษาอาหรับในข้อความโดยไม่มีการกำกับเสียง / การออกเสียง
ในภาษาอาหรับเช่นเดียวกับภาษาอื่น ๆ มีสิ่งที่เรียกว่าการกำกับเสียงเพื่อปรับปรุงการออกเสียง ไม่มีการประชุมเกี่ยวกับจำนวนกำกับควรเขียนสำหรับคำเดียว บางคนใช้ค่าต่ำสุด (ซึ่งฉันชอบ) เพียงพอที่จะทำให้การออกเสียงไม่ชัดเจนในขณะที่บางคนใช้มันอย่างฟุ่มเฟือยหรือเพียงเพื่อจุดประสงค์ด้านการประดิษฐ์ตัวอักษรที่สวยงาม ดังนั้นจึงมีความหลากหลายในสิ่งที่และจำนวนกำกับเกี่ยวข้องกับคำเดียว เมื่อฉันisearch-forward/backwardกดปุ่มC-s/rปัญหาจะเกิดขึ้นเมื่อฉันพิมพ์ลงใน mini-buffer การค้นหาโดยไม่ต้องใช้เครื่องหมายกำกับเสียงมันจะไม่ตรงกับคำเดียวกันในข้อความหากมีการกำกับออกเสียงทำให้งานค้นหาคำนี้ด้วยการกำกับออกเสียงที่อาจเกิดขึ้น มีวิธีที่จะทำให้การค้นหา / regexp ค้นหาไม่รู้กำกับออกเสียงหรือไม่? ฉันหวังว่าจะมีคำตอบที่สามารถขยายเพื่อรวมregexp C-M-s/rและgrepค้นหาที่ฉันใช้บ่อยในหางเสือ - projectile เพื่อค้นหาคำในโครงการยางหลายไฟล์ อัปเดต มันน่ายินดีที่ได้เห็นว่า Emacs ในฟังก์ชั่นการค้นหาทั้งหมดทำขั้นตอนการถอดลอกข้อความ (จากการเน้นเสียง / การกำกับ / คุณตั้งชื่อ) ก่อนการจับคู่ขั้นตอนเป็นพฤติกรรมเริ่มต้นที่อาจถูกปิดโดยคำนำหน้า ไม่ว่าจะใช้ภาษาใด โดยทั่วไปเมื่อฉันค้นหาสิ่งที่ฉันไม่คาดหวังจากตัวแก้ไขที่ดีที่สุด (Emacs) ที่จะล้มเหลวในการทำธุระนี้เพียงเพราะการกำกับหรือการเน้นเสียงบางอย่างที่ไม่ค่อยได้รับถ้าจำเป็นเพื่อให้ได้งานเขียนข้อความธรรมดา ๆ

1
โหมด Evil และการแสดงออกปกติ
ในกลุ่มถ้าฉันต้องการค้นหาชื่อตัวแปร LX ที่ X คือตัวเลขทั้งหมดฉันก็สามารถพิมพ์/L\dได้ อย่างไรก็ตามนี่ดูเหมือนจะใช้งานevilไม่ได้ มีอีกซินแทกซ์สำหรับนิพจน์ปกติในโหมดความชั่วร้ายหรือฉันจะต้องถอยกลับไปใช้ฟังก์ชันการทำงานของ Emacs เพื่อค้นหาและแทนที่โดยใช้นิพจน์ทั่วไปหรือไม่ ฉันกำลังใช้spacemacsและฉันค่อนข้างไร้เดียงสาเกี่ยวกับสิ่งต่าง ๆ ส่วนใหญ่ใน Emacs อยู่ในโหมด Evil อย่างมีความสุขตลอดทั้งวัน :)

1
`มองย้อนกลับไป 'ประสิทธิภาพ
(looking-back … (line-beginning-position))ฉันมีโค้ดบางส่วนใช้ สตริงของเอกสารlooking-backระบุว่าดีกว่าที่จะหลีกเลี่ยงฟังก์ชั่นนี้เพราะความเชื่องช้า ฉันอยากรู้อยากเห็นว่าการเข้าใกล้จะเร็วขึ้นไหม (save-excursion (goto-char (line-beginning-position)) (looking-at regexp stuff))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.