:s/pattern/replacement
ดำเนินการในนัดแรกและ:s/pattern/replacement/g
ทุกนัด
วิธีการใช้งานเฉพาะในล่าสุด?
:s/pattern/replacement
ดำเนินการในนัดแรกและ:s/pattern/replacement/g
ทุกนัด
วิธีการใช้งานเฉพาะในล่าสุด?
คำตอบ:
ฉันจะใช้ \zs
:%s/.*\zspattern/replacement/
คำอธิบายเล็กน้อย:
.
แสดงถึงอักขระเดี่ยวใด ๆ*
แสดงถึงการจับคู่โลภ (มากที่สุดเท่าที่เป็นไปได้)ในกลุ่มคุณสามารถใช้จุดยึดความกว้างเป็นศูนย์\zs
และ\ze
เพื่อกำหนดจุดเริ่มต้นและจุดสิ้นสุดของรูปแบบการค้นหาที่คุณต้องการจับคู่ สิ่งใดก่อน\zs
และหลัง\ze
ในรูปแบบของคุณจะไม่ได้รับผลกระทบจากการแทนที่
เพื่อให้ง่ายต่อการเข้าใจฉันต้องการใช้ตัวอย่างนี้จากการค้นหาของwikia และแทนที่ :
บันทึกการพิมพ์โดยใช้
\zs
และ\ze
เพื่อตั้งค่าจุดเริ่มต้นและจุดสิ้นสุดของรูปแบบ ตัวอย่างเช่นแทนที่จะเป็น::s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
ใช้:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
สำหรับข้อมูลเพิ่มเติมดูที่
คุณสามารถค้นหาสำหรับการแข่งขันที่ผ่านมาโดยการจัดกลุ่มทั้งหมด\(.*\)
แต่ ocurrence pattern
สุดท้ายของ จากนั้นออกจากกับกลุ่มที่จับและเพิ่ม\1
replacement
:%s/\(.*\)pattern/\1replacement/
\zs
วิธีการแก้ปัญหาของ @ ryuichiro ซึ่ง\1
วิธีการของคุณเทียบเท่ากับ verbose แต่มากกว่า verbose (ในทางกลับกันมันอาจจะจำได้ง่ายกว่าสำหรับบางคนโดยเฉพาะถ้าพวกเขาคุ้นเคยกับรสชาติของ regex อื่น ๆ ))
เพื่อความสมบูรณ์ฉันคิดว่าฉันโพสต์ทางเลือก เป็นกลุ่มมีรายการหลายบางแห่งที่มีความคล้ายคลึงกับมาตรฐานมากขึ้นปกติแสดงออกยืนยัน LookAround (ลบ / lookahead บวก / lookbehind) /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
ในกรณีนี้เราต้องการ lookahead ลบ\@!
ความหมายที่เราต้องการที่จะยืนยันว่าอะตอมที่นำหน้ารายการที่ไม่ได้เกิดขึ้นหลังจากที่รูปแบบ ในกรณีนี้อะตอมเป็นรูปแบบนำหน้าด้วยสิ่งอื่น:
:%s/pattern\(.*pattern\)\@!/replacement/
ส่วนภายในวงเล็บคือความกว้างเป็นศูนย์และไม่รวมอยู่ในการแข่งขันดังนั้นจะไม่ถูกแทนที่ด้วยการทดแทน
:h \@!
สำหรับข้อมูลเพิ่มเติมหรือ:h pattern-multi-items
สำหรับส่วนทั้งหมดที่มีรูปแบบการค้นหาอื่น ๆ
\zs
คำตอบของคุณได้ไหม?