, ben gibi bir düzenli ifade nesnesi tanımlayabilirsiniz:Yakalama dize regex üzerinde Pharo belgelerinden anladığımıza
re := '(foo|re)bar' asRegex
Ve bu aracılığıyla bir dize ile eşleşti regex değiştirebilirsiniz: Bunun sonucunda: "meh blah meh" ile sonuçlanır.
Şimdiye kadar çok iyi. Ama ben 'bar'
'u değiştirmek ve ön ekini yalnız bırakmak istiyorum. Bu nedenle, yakalanan parantez işlemek için bir değişken gerekir:
re copy: 'foobar blah rebar' replacingMatchesWith: '%1meh'
Ve sonuç istiyorum: 'foomeh blah remeh'
. Ancak, bu sadece bana verir: '%1meh blah %1meh'
. Ayrıca, \1
veya \\1
veya $1
veya {1}
kullanmayı denedim ve hazır dizesini değiştirme, , ör. Sonuç olarak, '\1meh blah \1meh'
.
Birlikte GNU Smalltalk kolayca yeterince bunu yapabilirsiniz:
'foobar blah rebar' replacingAllRegex: '(foo|re)bar' with: '%1meh'
Ama hiçbir yere ben Pharo bunu nasıl söyler Pharo regex belgelerinde bulamıyorum. Ben de Pharo regex için bir sürü googling yaptım, ama bir şey değil. Bu yetenek RxMatcher sınıfının veya başka bir Pharo regex sınıfının bir parçası mı?
o Pharo grupları yakalama ile değiştirilmesini desteklemez görünüyor – rock321987
Eh, her zamanki backreferencing stilleri denediniz mi? '\ 1' veya' \\ 1' veya '$ 1' gibi (belki de" MatchReplacedWith "ile)? Yakalama grupları desteklenir, Pharo'da eşleşmenin yapabileceği kadar açıktır, ancak geri başvuruların yedek kalıpların parçaları olarak desteklenip desteklenmediğine dair bir ipucu yoktur. –
@ WiktorStribiżew Evet, \ 1', '\\ 1' ve' $ 1' denedim. Her durumda, yerine, değişmez dize oldu. Bu girişimleri gösteren sorumu güncelledim. Yakalama gruplarının eşleşme kadar desteklendiğini görüyorum. Yakalamaların yakalanması ve numaralandırılması için dokümantasyonda örnekler vardır. Ancak, yedek bir dizide geri gönderme hakkında hiçbir şey. Bu regex'i bul/değiştir bana göre önemli görünüyor, bu yüzden desteklenmediğine şaşırdım. – lurker