Eclipse ค้นหานิพจน์ทั่วไปและแทนที่


119

ใน eclipse เป็นไปได้ไหมที่จะใช้สตริงการค้นหาที่ตรงกันเป็นส่วนหนึ่งของสตริงการแทนที่เมื่อทำการค้นหานิพจน์ทั่วไปและแทนที่

โดยทั่วไปฉันต้องการแทนที่การเกิดขึ้นทั้งหมดของ

variableName.someMethod()

ด้วย:

((TypeName)variableName.someMethod())

ที่ไหน variableNameสามารถเป็นชื่อตัวแปรใด ๆ ก็ได้

ในsedฉันสามารถใช้สิ่งต่างๆเช่น:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g

นั่นคือ, &แสดงถึงสตริงการค้นหาที่ตรงกัน มีอะไรที่คล้ายกันใน Eclipse หรือไม่?

ขอบคุณ!


เอกสารที่ดีเกี่ยวกับ Eclipse RegEx: help.eclipse.org/kepler/…
Kolob Canyon

คำตอบ:


225

ใช่ "()" จับภาพกลุ่ม คุณสามารถใช้อีกครั้งกับ $ i โดยที่ฉันเป็นกลุ่มจับภาพของฉัน

ดังนั้น:

ค้นหา: (\w+\.someMethod\(\))

แทนที่: ((TypeName)$1)

คำแนะนำ: CTRL+ Spaceในกล่องข้อความจะให้คำแนะนำทุกประเภทสำหรับการเขียนนิพจน์ทั่วไป


นั่นเป็นคำตอบที่ดีและคำใบ้ที่มีประโยชน์ มันจะมีประโยชน์มากกว่านี้หากมีการอธิบายรายละเอียดเพิ่มเติมเล็กน้อย
iammilind

Bravo Eclipse คุณใช้คุณสมบัตินี้อย่างถูกต้อง!
Kenogu Labz

ฉันชอบตัวอย่าง "Hex code for Unicode character" เป็นพิเศษ :)
Stewart Murrie

ฉันต้องการเพิ่มรหัสที่ช่วยฉันได้จริงๆ ฉันต้องการแทนที่ทุกครั้งstringVar.equals("xxx")ด้วย"xxx".equals(stringVar). ฉันใช้ regex ต่อไปนี้ในกล่องโต้ตอบค้นหา / แทนที่: search: ([^()! ]+).equals\("(.*)"\), replace: "$2".equals\($1\).
LaDude

ไม่ได้สำหรับฉัน. แทนที่กลุ่มแรกเสมอ ... ?
RightmireM

6

ใช้ ...
ค้นหา = (^. * import) (. *) (\ (. * \) :)
แทนที่ = $ 1 $ 2

... แทนที่ ...

from checks import checklist(_list):

... กับ ...

from checks import checklist



บล็อกในนิพจน์ทั่วไปจะถูกคั่นด้วยวงเล็บ (ซึ่งไม่นำหน้าด้วย "\")

(^. * import) พบ "จากการตรวจสอบการนำเข้า" และโหลดเป็น $ 1 (eclipse เริ่มนับที่ 1)

(. *) ค้นหารายการถัดไป " ทุกอย่าง "จนกว่าจะพบครั้งต่อไป" ("และโหลดเป็น $ 2 $ 2 หยุดที่" ("เนื่องจากส่วนถัดไป (ดูบรรทัดถัดไปด้านล่าง)

(\ (. * \) :) พูดว่า" ที่พบครั้งแรก "( "หลังจากเริ่มบล็อก $ 2 ... หยุดบล็อก $ 2 และเริ่ม $ 3 $ 3 จะโหลดด้วย" ('any text'): "หรือในตัวอย่างคือ" (_list): "

จากนั้นในการแทนที่ให้ใส่ $ 1 $ 2 เพื่อแทนที่ทั้งสามบล็อกด้วยสองบล็อกแรก



ภาพหน้าจอ


3

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

ค้นหา: (\ w + \. someMethod \ (\))

แทนที่: ((TypeName) $ 1)

ที่นี่:

ในการค้นหา:

  • '(' ')' แรกและสุดท้ายแสดงถึงกลุ่มใน regex

  • "\ w" แสดงคำ (ตัวอักษรและตัวเลข + ขีดล่าง)

  • '+' แสดงอย่างน้อยหนึ่งตัว (เช่นตัวอักษรและตัวเลขคละกัน + ขีดล่าง)

  • '' เป็นอักขระพิเศษที่แสดงถึงอักขระใด ๆ (เช่น + หมายถึงอักขระหนึ่งตัวขึ้นไป) เนื่องจากนี่เป็นอักขระพิเศษที่แสดงถึง "." เราควรให้อักขระหลบหนีด้วยเช่น "."

  • 'someMethod' จะได้รับตามที่ต้องการค้นหา

  • วงเล็บสองตัว '(', ')' จะได้รับพร้อมกับอักขระหลีกเนื่องจากเป็นอักขระพิเศษที่ใช้ในการพรรณนากลุ่ม (เราจะพูดถึงกลุ่มในประเด็นถัดไป)

แทนที่:

  • ได้รับ ' ((TypeName) $ 1) ' ที่นี่ $ 1 แสดงถึงกลุ่ม นั่นคืออักขระทั้งหมดที่อยู่ภายในวงเล็บแรกและตัวสุดท้าย '(', ')' ในช่องค้นหา

  • ตรวจสอบให้แน่ใจว่าคุณได้เลือกตัวเลือก "นิพจน์ทั่วไป" ในช่องค้นหาช่องแทนที่

ข้อมูลเพิ่มเติมเกี่ยวกับ RegEx สามารถพบได้ในhttp://regexr.com/


2

อย่างน้อยกลุ่ม STS (SpringSource Tool Suite) จะมีหมายเลขเริ่มต้นจากฟอร์ม 0 ดังนั้นการแทนที่สตริงจะเป็น

replace: ((TypeName)$0)

5
นั่นไม่ใช่ afaik ที่แท้จริง $ 0 แสดงถึงข้อความค้นหาดั้งเดิมทั้งหมด ในกรณีนี้ฉันเดาว่าน่าจะทำงานโดยบังเอิญ
Walter Heck

0

สำหรับคนที่ต้องการคำอธิบายและตัวอย่างวิธีใช้ regxp ใน Eclipse นี่คือตัวอย่างของฉันที่แสดงปัญหา

ใส่คำอธิบายภาพที่นี่

ฉันต้องการเปลี่ยนชื่อ

/download.mp4^lecture_id=271

ถึง

/271.mp4

และอาจมีได้หลายแบบ

นี่คือวิธีที่ควรทำ

ใส่คำอธิบายภาพที่นี่

จากนั้นกดปุ่มค้นหา / แทนที่

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