Regex eşleşmenin bir bölümüne bir dize ekler.


1

Bunu yapmak oldukça zor, olay şu:

Formda bir dize var:

GlobalParameters::$docId = DocList::$PARTNERS;

Ve sembolün sonuna _VIEW dizesini eklemek istiyorum . Sorun şu ki, sadece ORTAKLARIMLA eşleşmek değil, diğer sembollerle de eşleşmek istiyorum , bu yüzden bu regex'i denedim:

bul:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)\;

İle değiştirin:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)_VIEW\;

Ama yeni aldım:

GlobalParameters::$docId = DocList::$(.*)_VIEW;

Bütün maçlarda. Bu konuda nasıl çalışabilirim?

Yanıtlar:


0

Yanlış olan en önemli şey, eşleşen alanın sınırlandırdığı (ve değiştirme dizesinde )tanımlanması gereken \1:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\1_VIEW\;

Ayrıca, Geany uygulamanızın bu varsayılan ayarlara sahip olmamasına rağmen , aşağıdaki gibi, arama alt ifadesini gerektiren \(ve \)sınırlayan normal ifadeleri varsayılan olarak BRE (Temel Normal İfade) kipine kullanan birçok programın :

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\(.*\)\;

Not: v1.24'ten itibaren Geany'nin parantezlerden kaçmasına gerek yoktur, bu nedenle tam olarak (ve )eşleşen alanları sınırlandırmanız gerekir .

Diğer, daha basit arama ve değiştirme dizeleri başıma geliyor, ancak dosyadaki diğer dizelerin içeriğini görmeden hangisinin tatmin edici olacağından emin değilim. Ancak, aşağıdakilerin doğru olması gerekir: -

Ara:

\(GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$.*\)\;

Değiştir:

\1_VIEW\;

Burada iz dışında kalan tüm dizge ;eşleştirilir ve _VIEWeklenir.


Peki parantezler neden kaçtı? Eşleşmem gereken dizgenin bir parçası değiller ama yine de bilgisayarıma ulaşır ulaşmaz bu çözümü deneyeceğim. Teşekkür ederim.
— arielnmz

Normal ifadeler kullanan birçok program için varsayılan, kaçmayı gerektiren BRE (Temel Normal İfade) modudur. Vikipedi'ye bakınız . İplerinizi test sedettiğimde ters eğik çizgiler gerekli.
— AFH

Bunu bilmiyordum ama belki Geany varsayılan olarak bu modu kullanmıyordur.
— arielnmz

Geany'i tanımıyorum, belki de ters eğik çizgilere gerek duymuyorsunuz, ancak \1işaretli alt ifadeyi genişletmek için kesinlikle akıntıya ihtiyacınız var . Önce bunu kullanmayı deneyin, ardından gerekirse eğik çizgileri parantez içine ekleyin.
— AFH

Sadece denedim ve bir cazibe gibi çalışıyor! Teşekkür ederim! Grep'in tarlaları eşleştirmek için kullandığı sistemi gerçekten bilmiyordum. Tekrar teşekkürler.
— arielnmz

0

AFH'nin cevabını genişletmek için daha karmaşık bir örnek yaptım:

Değiştirilecek dize:

abc: 123

Ara:

(abc)\: (123)

Değiştir (1def ilk eşleşme ifadesine, 456 ikinciye eklenecektir):

\1def \2456

Sonuç:

abcdef 123456
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.