2012-11-28 16 views
8

Bir yorumda bulunma yöntemleri için genel yöntemleri korunan yöntemlerle değiştirmeye çalışıyorum.geany içinde regexp adlı grupların yerini bulun regexp

Bu yöntemlerden bazılarını test etmek için phpunit kullanıyorum, ancak bunların gerçekten kamuya açık olması gerekmez, bu nedenle bunları üretim sunucusuna değiştirmek ve test sırasında geri dönmek istiyorum. Ben ile değiştirin Eğer

(?<ws>^\s+)(?<pb>public)(?<fn>[^/\n]+)(?<cm>//TODO: change to protected) 

:

public function extractFile($fileName){ //TODO: change to protected 

Bu regexp'in: İşte

yöntem beyanıdır

\1protected\3\//TODO: change back to public for testing 

O çalışıyor gibi görünüyor ama ne işe yaramazsa, ile değiştiriniz. İlk grubu almak için \ 1 kullanmalıyım. Grupları, bunları değiştirme metinlerine erişemiyorsanız neden adlandırın? \, $ Ws, \ $ ws gibi şeyler denedim ama bu işe yaramıyor.

Soruma soru: \ 1 ile değiştirilen grupla değiştirmek istersem, hangi metin değiştiriliyor?

+0

Teşekkür ederim, bunu yapmadı. Belgelerin herhangi bir yerinde bulamıyor. Grupları isimlendirirseniz, yedek dizede kullanabileceğinizi düşünürsünüz. Genelde faydalı olan herhangi bir cevabı oylarım, şimdi de kabul edebileceğinizi görüyorum. Bunu şimdi yapacak. – HMR

cevap

6

Grup sözdizimi adlı ?<ws>, .NET/Perl tarafından kullanılanla aynıdır. Bu regex motorları için adlandırılmış grup için yedek dize referansı ${ws}'dur. Bu, yeni dize olurdu şu anlama gelir:

${ws}protected${fn}\//TODO: change back to public for testing

m.buettner tarafından bahsedilen \k<ws> referans sadece gerçek regex geribaşvuruların için kullanılmaktadır.

Ekstra Bilgi:

Geany gibi görünüyor da izin verir Python tarzında kullanımı adında gruplar:

  • ?P<ws>
  • (?P=ws) olan yedek dize sözdizimi yakalama sözdizimi
  • \g<ws> olduğu regex backreference sözdizimi

DÜZENLEME: Bir çözüm başarmak vermedi için

umudumu görünüyor. manual,

'dan "Bir alt şablon, üç yoldan biriyle adlandırılabilir: (? ...) veya (? 'Name' ...) Perl veya (? P ...) 'da olduğu gibi Python: modelinin parantezleri, geri tepkiler, özyineleme ve koşullar gibi diğer bölümlerinin yakalanması için referanslar, adının yanı sıra numarayla yapılabilir. "

Ve aşağı ilerletmek: adlandırılmış alt şablonların için

"Geri referanslar Perl sözdizimi \ k veya \ k'name' ya da Python sözdizimi (? P = isim) kullanın."

ve

'adıyla tarafından başvuruda bulunulan bir altmodel önce veya referans sonrasında desen görünebilir.' Yani

adında kullanarak için sözdizimi benim çıkarım Gruplar doğruydu.Ne yazık ki, sadece eşleşen desende kullanılabilir.Onlar "Neden isim grupları ...?" sorusuna cevap verir.

Bu ne kadar aptalca? adlandırılmış gruplar ve bunların eşleştirme modelinde kullanımı nasıl yapılır, neden değiştirme dizisinde kullanımda bulunmuyor?

+0

Cevabınız için teşekkür ederiz. Belki farklı bir geany var ama "(? win) 7" ifadesini kullanarak "7 $" metnini kullanarak "$ {w} 8" ile değiştirilirse sonuç: "$ {w} 8" geany kullanarak 1.22 – HMR

+0

@HMR - Ben aslında geany yok. Yakalama sözdiziminin .NET/Perl ile aynı olduğunu gözlemledim. Bu, çevrimiçi elkitabını her ikisine de '?' Ws '' de izin verdiğim zaman onaylandı. Altta yatan normal ifade motorunun, yedek dizide aynı tarzdaki yakalamalara izin vereceğini umuyordum. Sadece el kitabında biraz daha okumuştum. Adlandırılmış gruplar, değiştirilen dizede _not_ izinli gibi görünüyor. Daha fazla ayrıntı eklemek için cevabımı düzenlerim. – robinCTS

+0

Buna bakmak için zaman ayırdığınız için teşekkür ederim. Değiştirme dizesiyle ilgili bir belgede hiçbir şey bulamadım, ancak karar vermeden önce bir şeyi gözden kaçırmadığımdan emin olmak istiyorum. – HMR