IntelliJ'de RegEx geri referansları


129

Aşağıdaki dönüşümü gerçekleştirmek için IntelliJ'in bul ve değiştir özelliğini kullanmak istiyorum:

// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar

Aşağıdakileri denedim:

Bulunacak metin: model.put\((.*),(.*)\) Şununla değiştirin:model\[\\1\] = \\2

Ama Intellij tanımak görünmüyor \\1ve \\2geribaşvuruların olarak. Ayrıca tek bir eğik çizgi denedim ama bu da işe yaramıyor.

Yanıtlar:


196

IntelliJ, yedek geri referanslar $1için kullanır .

IntelliJ'in yardımından:

Normal ifadeler ve sözdizimleri hakkında daha fazla bilgi için, java.util.regex belgelerine bakın. Geri referanslar format yerine $ n olmalıdır.


15
Görünüşe göre "\" gerekli değil: jetbrains.com/idea/help/… . Ayrıca, benim için, yalnızca grubumu "()" ile çevrelediğimde çalışır, aksi takdirde daha sonra referans veremem. Ör: arama (foo)yerine:$1bar
Ghedeon

@Ghedeon: Muhtemelen yorumunuzu bir cevap olarak veya mevcut cevaba eklemelisiniz. İfadeyi () içine koyma öneriniz benim için işe yarayan şeydi.
mindreader

1 my ilgili sorunu çözüldü bilgilerin bit i, yani dolar kıvırcık sarmalayıcıları ile değişkenlerin etrafında alıntı artı sarmalayıcılarını yerine gidiyorum '+ var +'için ${var}bazı şablon dizelerinde ve intellij değiştirilmesini bitirmek olmaz neden çözemedim. değişimde kaçılması $gerekiyor.
worc

13

Kısacası, yedek geri başvurular $1için $niçin kullanmalısınız . sözdizimi yalnızca arama içindeki geri başvurular içindir.\1

IntelliJ 2016'da, uygulama içi belgeler yanıltıcıdır. İşte tam belgelerden daha iyi bir alıntı:

Eşleşen alt dizeyi geçerli normal ifadenin dışında bir yere başvurmanız gerekiyorsa (örneğin, başka bir normal ifadede bir yedek dize olarak), dolar işaretini ($ num, burada num = 1..n) kullanarak alabilirsiniz.

Kaynak: 2016.1 normal ifade sözdizimi, İpuçları ve Püf Noktaları


2

Fikir 9.0'daki (ve belki de diğer sürümlerdeki) regex için ürün içi bağlamsal yardım yanlış gibi görünüyor. Bunu belirtir:

  Geri referanslar
  \ n
  N'inci yakalama grubu eşleştiğinde

Ama görünüşe göre, önceki cevaplarda bahsedildiği ve benim deneyimim olduğu gibi, bu gerçekten \ $ n yerine geri referanslar için \ n

Bu bağlamsal yardıma, "Metni Değiştir" iletişim kutusundaki "Normal ifade" radyo seçeneğinin yanındaki "[Yardım]" bağlantısını tıklayarak ulaşabilirsiniz.


0

IntelliJ IDEA / Referans / Normal İfade Söz Dizimi Referansı


Alt ifadeyle eşleşir ve eşleşmeyi hatırlar. Eşleşen alt dizeyi aynı normal ifade içinde kullanmanız gerekirse, geri başvuruyu (\ num, burada num = 1..n) kullanarak alabilirsiniz. Eşleşen alt dizeyi geçerli normal ifadenin dışında bir yere başvurmanız gerekiyorsa (örneğin, Değiştirme alanındaki başka bir normal ifadede), dolar işaretini ($ num, burada num = 1..n) kullanarak alabilirsiniz. Alt ifadeye parantez karakterlerini eklemeniz gerekiyorsa, "(" veya ")" kullanın.


Aynı şeyi burada buldum ; ancak, sonuçta ters eğik çizgi olmadan 1 $ kullanarak başarılı oldum.
Joe Tricarico
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.