คุณอ้างอิงกลุ่มการดักจับด้วยการค้นหาและแทนที่ regex ใน Visual Studio 2012, 2013, 2015 และรหัส VS อย่างไร


254

ฉันรู้ว่ามีคำถามมากมายเกี่ยวกับสิ่งนี้ แต่ไม่มีสิ่งใดที่ฉันพบว่ามีการอ้างอิงโดยเฉพาะกับเวอร์ชัน VS ที่พวกเขาอ้างถึง เมื่อขาดข้อมูลสำคัญนั้นฉันก็ยังไม่สามารถใช้คำตอบที่พบได้สำเร็จ ที่พบมากที่สุดคือ

  • ล้อมรอบด้วย {} จับการแสดงผลด้วย \ 1, \ 2, \ n

อย่างไรก็ตามดูเหมือนว่าจะเป็นวิธีการเก่าในการค้นหาและแทนที่ regex ใน Visual Studio และจะไม่ทำงานใน VS 2012


1
การค้นหานี้ไม่ยากเกินไป: ในกล่องโต้ตอบค้นหา / แทนที่, F1; ในช่วงต้นของการค้นหาและการแทนที่ข้อความมีลิงก์ไปยังการใช้นิพจน์ปกติใน VS ; มีเคล็ดลับที่ 2 หมายถึงคุณแทนในการแสดงผลปกติ ; มีจะช่วยให้คุณพื้นฐานและกล่าวว่ามีรายละเอียดมากขึ้นภายใต้แทนเลขกลุ่มและทำหน้าที่แทนชื่อกลุ่ม
PJTraill

2
@PJTraill เป็นเรื่องดีที่รู้ว่าพวกเขาทำให้ง่ายต่อการตอบคำถามสำหรับรุ่น 2012 ของพวกเขาในช่วงระหว่างปี 2556 ถึง 2558 อย่างไรก็ตามจากการโหวตฉันคิดว่ามันค่อนข้างชัดเจนว่ายังไม่ "ไม่ยากเกินไป" ในการช่วยเหลือ IMO: หากการค้นหาและออกเสียงลงคะแนนในบทความล้นสแต็กง่ายกว่าการใช้การค้นหาแทนที่จับภาพโดยไม่ต้องค้นหาความช่วยเหลือเลยมันยากกว่าที่ควร
SgtPooki

สิ่งหนึ่งที่ทำให้ฉันสับสนเกี่ยวกับ MSVS 2012/3 คือกล่องโต้ตอบการค้นหา / แทนที่ที่แตกต่างกันสองรายการโดยเฉพาะอย่างยิ่งกล่องขนาดเล็ก (Ctrl-H) ที่ฉันเก็บไว้โดยไม่ตั้งใจ (ด้วยการกดแป้นอาจหมายถึงอย่างอื่น) เปลี่ยนขอบเขตของการค้นหา . แต่จุดที่ฉันต้องการทำคือกล่องโต้ตอบขนาดใหญ่ (Ctrl-Shift-H) มีปุ่มหลังจากฟิลด์ค้นหาและแทนที่ที่ให้รายการความเป็นไปได้ที่สำคัญยิ่งขึ้นรวมถึงสิ่งที่คุณกำลังมองหา - ดังนั้นคุณจึงไม่ ต้องการความช่วยเหลือ! ฉันเดาว่าหลายคนอาจจะไม่เห็นปุ่มหรือจุดจอดในกล่องโต้ตอบ Ctrl-H และมองไม่เห็น
PJTraill

ฉันเห็นด้วยว่าการช่วยเหลือเป็นเรื่องยุ่งยากที่ต้องค้นหา ฉันสงสัยว่าพวกเขาให้ความสำคัญกับการค้นหาข้อความธรรมดา ประเด็นของฉันคือยิ่งกว่านั้นถ้าใครรู้หรือสมมติว่ามันต้องอยู่ที่นั่นอย่างใดอย่างหนึ่งสามารถหาได้ง่ายพอสมควร; บ่อยครั้งที่ฉันทำตามเส้นทางนั้นเนื่องจากฉันต้องการใช้เอกสารที่เป็นที่ยอมรับเมื่อฉันสามารถค้นหาได้ ฉันไม่ได้ตั้งใจฟังดูถูก; ฉันคิดว่าทั้ง "ยากเกินไป" และ "ไม่ยากเกินไป" - พวกเขาจะไม่ตรงกันข้ามถ้าคุณเห็นว่า "ไม่มากเกินไป" ในฐานะที่มีคุณสมบัติ "ยาก" และเพิ่มคำตอบสำหรับความหมายโดยนัยว่า "ยากสำหรับอะไร"
PJTraill

ฉัน "รู้" ว่าการติดแท็ก REGEXP กำลังใช้ '()' อ่านเอกสารอีกครั้งและมันใช้งานไม่ได้ ... ดังนั้นฉันมาที่นี่เพื่อให้แน่ใจว่า ... จากนั้นฉันทำการทดลองเพิ่มเติมและใช้งานได้ ดังนั้น IMHO เอกสาร MSDN จะต้องมีความชัดเจนเป็นพิเศษว่า () ใช้ในการ "แท็ก" การแสดงออกสำหรับพวกเราที่ต้องเรียนรู้การตั้งชื่อ VS6 "แท็ก" เก่า มันจะดีถ้าพวกเขาสามารถใช้ระบบการตั้งชื่อแบบเดียวกัน กลุ่มที่มีหมายเลข ... เพียง แต่ไม่ได้ทำให้การซิงโครไนซ์ดีพอ IMHO
Ross Youngblood

คำตอบ:


355

ในการค้นหาและแทนที่ใน VS 2012 และ VS 2015 ให้ทำดังต่อไปนี้:

ตัวอย่าง (ขอบคุณ syonip)

ในตัวเลือกการค้นหาตรวจสอบให้แน่ใจว่าได้เลือก 'ใช้นิพจน์ปกติ' และใส่ข้อความต่อไปนี้เป็นข้อความเพื่อค้นหา:

_platformActions.InstallApp\((.+)\)

และต่อไปนี้เป็นข้อความที่จะแทนที่ด้วย:

this.Platform().App($1).Install()

หมายเหตุ:เนื่องจาก SLaks ชี้ให้เห็นในความคิดเห็นด้านล่างการเปลี่ยนแปลงในไวยากรณ์ regex เกิดจากการ VS2012 สลับไปยังเครื่องยนต์. Net regex มาตรฐาน

หมายเหตุ: ผู้วิจารณ์คนอื่นชี้ให้เห็นว่าวิธีนี้ใช้ได้ใน Visual Studio Code (vscode) เช่นกัน


10
เพื่อให้เป็นทั่วไปมากขึ้นตอนนี้ VS2012 ใช้เอ็นจิ้น. net regex มาตรฐาน
SLAK

4
คุณไม่จำเป็นต้องหลบหนีช่วงเวลาระหว่าง_platformActionsและInstallApp?
rory.ap

เมื่อคิดถึงตอนนี้มันจะสมเหตุสมผล ฉันยังไม่ได้ทดสอบ อย่าลังเลที่จะโยนการแก้ไขในที่นั่น
SgtPooki

1
จบลงฉันใช้ชื่อเป็นตัวเลขดูเหมือนจะไม่ทำงานสำหรับฉันอย่างน้อย (?<rval>.+)ในการค้นหาและแทนที่${rval}
Mark Schultheiss

2
ความช่วยเหลือพิเศษบางอย่าง: หากคุณต้องการแทนที่สิ่งของ (. *) ด้วยสิ่ง $ 18 (เพิ่ม '8' โดยตรงหลังจากการจับ) คุณจะต้องใช้สิ่ง $ {1} 8
Luc Bloom

17

เพื่อเพิ่มตัวอย่างนี้นี่คือสิ่งที่ฉันต้องทำในรหัสของฉัน:

หาอะไร:

_platformActions.InstallApp\((.+)\)

แทนที่ด้วย:

this.Platform().App($1).Install()

สิ่งนี้จะแทนที่การเรียกไปยัง InstallApp (x) ด้วย this.Platform (). App (x) .Install ()

* อย่าลืมทำเครื่องหมาย "ใช้การแสดงออกปกติ" ในตัวเลือกการค้นหา


10

หากคุณต้องการทำงานกับการใช้ชื่อกลุ่ม (ใช้ตัวอย่างเดียวกันกับด้านบน):

หาอะไร:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

แทนที่ด้วย:

this.Platform().App(${mygroupname}).Install()

9

เพื่อปรับปรุงคำตอบข้างต้น: คุณควรแทนที่

_platformActions.InstallApp\((.+)\)

กับ

this.Platform().App(${1}).Install()

คำนึงถึง$ {1}หากคุณต้องการเพิ่มตัวเลขไว้ด้านหลังการจับ $18จะพยายามแทรกการดักจับการค้นหาครั้งที่ 18 ไม่ใช่อันแรกที่8ต่อท้าย

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