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.