Eclipse, düzenli ifade arama ve değiştirme


119

Tutulmada, bir düzenli ifade araması ve değiştirmesi gerçekleştirirken eşleşen arama dizesini değiştirme dizesinin bir parçası olarak kullanmak mümkün müdür?

Temel olarak, tüm oluşumlarını değiştirmek istiyorum

variableName.someMethod()

ile:

((TypeName)variableName.someMethod())

Nerede variableName hiç bir değişken adı olabilir.

In sed ben gibi bir şey kullanabilirsiniz:

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

Yani & eşleşen arama dizesini temsil eder. Eclipse'de benzer bir şey var mı?

Teşekkürler!


Eclipse RegEx ile ilgili iyi belgeler: help.eclipse.org/kepler/…
Kolob Canyon

Yanıtlar:


225

Evet, "()" bir grubu yakalar. i'nci yakalama grubu olduğum yerde $ i ile tekrar kullanabilirsiniz.

Yani:

arama: (\w+\.someMethod\(\))

değiştirin: ((TypeName)$1)

İpucu: Metin kutularındaki CTRL+ Spacesize normal ifade yazma için her türlü öneriyi sunar.


Bu güzel bir cevap ve faydalı bir ipucu. Biraz daha detaylı anlatılsaydı daha yararlı olurdu.
iammilind

Bravo Eclipse, bu özelliği doğru bir şekilde uyguladınız!
Kenogu Labz

Özellikle "Unicode karakteri için onaltılık kod" örneğini seviyorum :)
Stewart Murrie

Bana gerçekten yardımcı olan bazı kodlar eklemek istiyorum. Her yerine gerekli stringVar.equals("xxx")olan "xxx".equals(stringVar). Bul / değiştir iletişim kutusunda şu normal ifadeyi kullandım: search: ([^()! ]+).equals\("(.*)"\), replace: "$2".equals\($1\).
LaDude

Benim için değil. Her zaman ilk grubu değiştirir ...?
RightmireM

6

...
arama = (^. * İçe aktar) (. *) (\ (. * \) :) kullanarak
değiştir = 1 $ 2

... değiştirir ...

from checks import checklist(_list):

...ile...

from checks import checklist



Normal ifadedeki bloklar parantez ile gösterilir (bunlardan önce bir "\" gelmez)

(^. * İçe aktarma) "çek içe aktarmadan" bulur ve onu 1 $ 'a yükler (tutulma 1'den saymaya başlar)

(. *) Sonrakini bul " her şey "bir sonraki karşılaşılana kadar" ("ve $ 2'ye yükler. $ 2, bir sonraki bölüm nedeniyle" ("de durur (aşağıdaki sonraki satıra bakın)

(\ (. * \) :)" ilk karşılaşıldığında "der ( "$ 2 bloğunu başlattıktan sonra ... $ 2 bloğunu durdurun ve $ 3'ü başlatın. $ 3," ('herhangi bir metin'): "veya örnekte" (_list): "ile yüklenir

. Üç bloğun tümünü ilk ikisiyle değiştirmek için $ 2 $.



Ekran görüntüsü


3

NomeN doğru yanıt verdi, ancak bu yanıt benim gibi yeni başlayanlar için pek işe yaramaz çünkü çözmemiz gereken başka bir sorun olacak ve orada RegEx'i nasıl kullanacağımızı bilemeyeceğiz. Bu yüzden buna biraz açıklama ekliyorum. Cevap

arama: (\ w + \. birYöntem \ (\))

değiştirin: ((TürAdı) $ 1)

Buraya:

Arayış içinde olmak:

  • İlk ve son '(' ')', normal ifadede bir grubu gösterir

  • '\ w' kelimeleri gösterir (alfanümerik + alt çizgi)

  • "+" bir veya daha fazlasını gösterir (yani bir veya daha fazla alfanümerik + alt çizgi)

  • '' herhangi bir karakteri tasvir eden özel bir karakterdir (yani. +, herhangi bir karakterden biri veya daha fazlası anlamına gelir). Çünkü bu, a 'yı tasvir etmek için özel bir karakter. onunla bir kaçış karakteri vermeliyiz, yani '.'

  • 'someMethod', aranacağı gibi verilir.

  • İki parantez '(', ')' kaçış karakteriyle birlikte verilmiştir çünkü bunlar bir grubu betimlemek için kullanılan özel karakterlerdir (sonraki noktada grubu tartışacağız)

Yerine:

  • ' ((TürAdı) $ 1) ' verilir, burada $ 1 grubu gösterir. Arama alanında ilk ve son parantez '(', ')' içinde bulunan tüm karakterler budur

  • Ayrıca bir değiştirme kutusu bul bölümünde 'Normal ifade' seçeneğini işaretlediğinizden emin olun.

RegEx hakkında daha fazla bilgi http://regexr.com/ adresinde bulunabilir .


2

En azından STS (SpringSource Tool Suite) grupları 0'dan başlayarak numaralandırılmıştır, bu nedenle dizeyi değiştir

replace: ((TypeName)$0)

5
Bu doğru değil afaik. $ 0, tüm orijinal arama terimini temsil eder. Bu durumda tesadüfen işe yarayacağını tahmin ediyorum.
Walter Heck

0

Eclipse'de regxp'nin nasıl kullanılacağına dair bir açıklamaya ve örneğe ihtiyacı olan biri için. İşte problemi gösteren örneğim.

görüntü açıklamasını buraya girin

Yeniden adlandırmak istiyorum

/download.mp4^lecture_id=271

için

/271.mp4

Ve bunlardan birden fazla olabilir.

İşte nasıl yapılacağı.

görüntü açıklamasını buraya girin

Ardından bul / değiştir düğmesine basın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.