Z tego co mogę zebrać z dokumentacji Pharo na regex, mogę określić regularny obiekt określenia takie jak:przechwytywania ciąg zamiennik regex
re := '(foo|re)bar' asRegex
I mogę zastąpić dopasowany regex z ciągiem przez to:
re copy: 'foobar blah rebar' replacingMatchesWith: 'meh'
Co spowoduje: `` meh bla meh '.
Jak dotąd, tak dobrze. Ale chcę zastąpić 'bar'
i zostawić prefiks sam. Dlatego muszę zmienną obsłużyć przechwycony nawiasach:
re copy: 'foobar blah rebar' replacingMatchesWith: '%1meh'
I chcę wynik: 'foomeh blah remeh'
. Jednak to tylko daje mi: '%1meh blah %1meh'
. Próbowałem również użyć \1
lub \\1
lub $1
lubi otrzymałem dosłowny zamiennik ciągu, np. ., '\1meh blah \1meh'
w wyniku.
mogę to zrobić dość łatwo w Smalltalk GNU z:
'foobar blah rebar' replacingAllRegex: '(foo|re)bar' with: '%1meh'
Ale nie mogę znaleźć nigdzie w dokumentacji regex Pharo, który mówi mi, jak mogę to zrobić w Pharo. Zrobiłem też sporo wyszukując dla regexu Pharo, ale niczego nie odkryłem. Czy ta funkcja jest częścią klasy RxMatcher lub innej klasy regex Pharo?
wydaje Pharo nie obsługuje wymianę z przechwytywanie grup – rock321987
Cóż, próbowałeś zwykłe style backreferencing? Jak '\ 1' lub' \\ 1' lub '$ 1' (być może z' matchesReplacedWith')? Grupy przechwytywania są obsługiwane, jest jasne, co może zrobić dopasowanie w Pharo, ale nie ma podpowiedzi, czy odsyłacze wstecz są obsługiwane jako części wzorców zastępczych. –
@ WiktorStribiżew Tak, próbowałem również '\ 1',' \\ 1' i '$ 1'. W każdym przypadku zamiennikiem był łańcuch literowy. Zaktualizowałem moje pytanie wskazujące na te próby. Widzę, że grupy przechwytywania są obsługiwane, o ile dopasowywanie idzie. Istnieją przykłady w dokumentacji do przechwytywania i wyliczania przechwytów. Jednak nie ma nic o odwołaniach do nich w łańcuchu zamiennym. To wydaje się być fundamentalne dla znalezienia/zastąpienia mnie, więc jestem zaskoczony, że nie jest obsługiwany. – lurker