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

นิพจน์ทั่วไป (มักเรียกสั้น ๆ ว่า "regex") เป็นนิพจน์ที่เขียนด้วยภาษาประกาศที่ใช้สำหรับรูปแบบการจับคู่ภายในสตริง

1
เรียงตามคำที่คั่นด้วยเครื่องหมายจุลภาค
คำสั่งปกติ: การเรียงลำดับสามารถเรียงลำดับบรรทัดตามคอลัมน์หรือคอลัมน์เสมือน ( \%cหรือ\%v), สามารถใช้คอลัมน์ตรรกะระดับสูงกว่าเป็นคีย์การเรียงลำดับได้หรือไม่ การใช้นิพจน์ทั่วไปนั้นมีความซับซ้อนเล็กน้อยสำหรับสถานการณ์นี้ (คอลัมน์อยู่ใกล้กับจุดสิ้นสุดของบรรทัด) และดูเหมือนว่ายูทิลิตีการเรียงลำดับทำอะไร ( sork -k) แต่การเรียงลำดับด้วยฟังก์ชันนี้ไม่สามารถใช้งานได้บน Windows ปลั๊กอินที่เป็นกลุ่มจะช่วยได้เช่นกัน ตัวอย่างเช่นฉันต้องการเรียงลำดับ 2 บรรทัดด้านล่างตามคอลัมน์สุดท้ายคั่นด้วยเครื่องหมายจุลภาค สถานการณ์จริงของฉันมีคอลัมน์และรูปแบบสตริงมากขึ้น ระบุตัวคั่นคอลัมน์จะทำให้มันง่ายขึ้นมาก xxx,yyy,zzz,0x123 zzxz,xxxx,yyyy,0x121

6
ลบ n lines ข้าม 1 สคริปต์บรรทัด
ฉันต้องการสร้างสคริปต์ Vim พื้นฐานที่เพียงแค่ลบบรรทัด n ข้าม 1 บรรทัดและทำซ้ำจนกว่าจะสิ้นสุดของเอกสาร ฉันไม่สนใจการจับคู่ที่เฉพาะเจาะจงฉันแค่ต้องการลบบรรทัด ตัวอย่างเช่น; ดังนั้นฉันต้องการทำซ้ำคำสั่ง3ddjสำหรับเอกสารทั้งหมด Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. …

1
ชื่อโทเค็น '\%' และ '\ @' ใน vim regex คืออะไร แล้วมันทำอะไร?
ขณะแก้ไขไฟล์ไวยากรณ์ฉันพบสิ่งที่ชอบ: \s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$ ฉันคุ้นเคยกับคนอื่นมากกว่า\%และที่\@นั่น ฉันไม่สามารถทำ Google ด้วยซ้ำเพราะไม่รู้ว่าชื่ออะไร ดังนั้นมันคืออะไรและมันทำอะไร?

3
ทางเลือกเพื่อหลบหลีกการทับในการค้นหาและแทนที่สตริงที่มีความยาว
มีทางเลือกอื่นใดในการค้นหาเป็นกลุ่มและแทนที่สตริง, แทนที่จะต้องหลีกหนีทุกอักขระพิเศษในสตริง ตัวอย่างเช่นหากฉันต้องการจับคู่สตริงต่อไปนี้และแทนที่ด้วยบางสิ่ง [ERROR] Login unsucessful ถ้าอย่างนั้นฉันต้องทำ :%s/\[ERROR\]\ Login\ unsucessful/something/g และมันก็น่าเกลียดและเจ็บปวดมากขึ้นสำหรับสตริงที่ซับซ้อนที่มีอักขระพิเศษจำนวนมาก ฉันต้องการทำบางสิ่งเช่น :%s/"[ERROR] Login unsucessful"/something/g ซึ่งจะหลีกเลี่ยงการหลบหนีทั้งหมด มีคุณสมบัติเช่นนี้หรือไม่?

1
ใช้คำสั่งโหมดปกติเพื่อจับคู่ regex
ฉันใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่สตริงเอกสารภายใต้นิยามฟังก์ชัน Clojure: \vdefn.*\n\s*\zs"([^"]|\n)*" มีวิธีเรียกใช้gqคำสั่งโหมดปกติ(บรรทัดรูปแบบ) ในทุกการแข่งขันของรูปแบบนี้ในไฟล์ที่กำหนดหรือไม่?

2
บรรทัดที่ซ้ำกันที่ขึ้นต้นด้วย“ x” แทนที่“ x” ในบรรทัดที่ซ้ำกันด้วย“ y” หรือไม่
ฉันมีไฟล์ที่มีรูปแบบต่อไปนี้: foo 111 baz foo 222 baz foo 333 baz ซึ่งต้องเปลี่ยนเป็น foo 111 bar 111 baz foo 222 bar 222 baz foo 333 bar 333 baz ดังนั้นทำซ้ำทุกบรรทัดที่ขึ้นต้นด้วยfooและเปลี่ยนแปลงเฉพาะfooในซ้ำ แต่ปล่อยให้ส่วนที่เหลือของบรรทัด (ซึ่งแตกต่างกันในแต่ละกรณี) เหมือนเดิม ทำอย่างไร

2
การแทนที่การแสดงออกปกติกรณีผสมในกลุ่ม
ฉันมักจะเจอสถานการณ์ที่ฉันมีไฟล์ที่มีตัวพิมพ์จำนวนมาก ตัวอย่างเช่น, CamelCase and camelCase ฉันกำลังมองหาตัวแทนนิพจน์ปกติที่จะผลิต AnotherCase and anotherCase ตอนนี้ฉันทำได้สองขั้นตอนหลังจากเลือกเส้นสายตา :s/CamelCase/AnotherCase/g :s/camelCase/anotherCase/g เป็นไปได้ในการเปลี่ยนขั้นตอนเดียวหรือฉันควรดูตัวเลือกอื่น ๆ เช่นฟังก์ชั่น.vimrcหรือไม่

5
จะแทนที่เนื้อหาระหว่างสองรูปแบบจากไฟล์ได้อย่างไร
ฉันเป็นรูปแบบของไฟล์ต่อไปนี้: <common> fitnes=0 genetic=1 method=0 </common> <inputs> foo=bar bar=foo </inputs> <limits> balance=200.00 </limits> และฉันต้องการที่จะลบทุกสิ่งที่อยู่ระหว่าง<inputs>และ</inputs>(ยกเว้นรูปแบบด้วยตนเอง) และแทนที่ด้วยเนื้อหาจากไฟล์อื่น (เช่นfoo.txt) กล่าวอีกนัยหนึ่งด้วยfoo=barและbar=fooจะถูกแทนที่ด้วยเนื้อหาอื่น อาจเป็นไปได้ว่าคล้ายกับวิธีที่คุณลบการแข่งขันหลายบรรทัดเช่น: :g/<inputs/,/inputs>/d แต่ฉันไม่แน่ใจในสิ่งที่ฉันควรแทนที่dเพื่อแทรกเนื้อหาของไฟล์อื่น แต่ฉันต้องการเก็บรูปแบบการจับคู่ไว้ วิธีที่คล้ายกันคือการลบเนื้อหาภายในของแท็ก htmlเช่น :/<inputs>/norm vitd แต่ฉันไม่รู้ว่าคุณจะเพิ่มเนื้อหาลงในไฟล์ได้อย่างไร เป็นการดีที่ฉันพยายามที่จะหาหนึ่งซับเพราะมันจะเป็นส่วนหนึ่งของสคริปต์อื่น ฉันจะบรรลุสิ่งนั้นได้อย่างไร

2
วิธีจับคู่คำที่ลงท้ายด้วยตัวอักษรตัวพิมพ์ใหญ่และตัวอักษรที่ระบุได้อย่างไร
ฉันมีคำเหมือนlblSERINOdในประโยค คำจะถูกคั่นด้วยช่องว่างสีขาว ฉันต้องการที่จะเข้ามาแทนที่ในตอนท้ายของคำดังกล่าวทั้งหมดที่มีd uดังนั้นสำหรับตัวอย่างเช่นจะมีลักษณะเช่นlblSERINOdlblSERINOu ฉันลองแล้วs/.*\ud /u /gแต่พูดว่าไม่สามารถหา.*\udได้ ปัญหาคืออะไรที่นี่?

1
Regex ที่ชอบการแข่งขันที่สั้นกว่าในการแข่งขัน? (สิ่งนี้เกี่ยวข้องมากกว่าการไม่โลภ)
ฉันพยายามสร้างสคริปต์เพื่อทำการค้นหาแบบฟัซซีภายในบัฟเฟอร์ แนวคิดหลักคือการใช้การป้อนข้อมูลบางส่วนและแทรก.\{-}ระหว่างคู่ของตัวละครทุกเช่นกลายเป็นfoof.\{-}o.\{-}o วิธีนี้ใช้งานได้ดี แต่มีการจับคู่ที่ไม่เหมาะเป็นจำนวนมาก ฉันคิดว่าการค้นหาที่คลุมเครือควรให้ผลการแข่งขันที่สั้นที่สุดก่อน ลองพิจารณาตัวอย่างต่อไปนี้: public void put() การค้นหาคลุมเครือput(เช่นนั้นp.\{-}u.\{-}t) จะจับคู่สตริงทั้งหมดpublic void putแต่การย่อตัวputภายในนั้นจะมีประโยชน์มากกว่า ผู้ดำเนินการที่ไม่ใช่โลภเก่งในการค้นหาการแข่งขันที่สิ้นสุดก่อนหน้านี้ แต่ฉันต้องการบางสิ่งที่สามารถทำได้ในเวลาเดียวกันต้องการการแข่งขันที่เริ่มต้นในภายหลัง ตามหลักการแล้วมันไม่ควรโลภทั้งสองทิศทาง เป็นไปได้ไหม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.