Von dem, was ich aus der Pharo Dokumentation auf regex sammeln kann, kann ich einen regulären Ausdruck Objekt definieren, wie:Capture-String in regex Ersatz
re := '(foo|re)bar' asRegex
Und ich kann die abgestimmte regex mit einer Schnur über diese ersetzen:
re copy: 'foobar blah rebar' replacingMatchesWith: 'meh'
Was ergibt: `'mah blah meh'.
So weit, so gut. Aber ich möchte die 'bar'
ersetzen und das Präfix allein lassen. Daher brauche ich eine Variable, die die erfasste, in Klammern zu handhaben:
re copy: 'foobar blah rebar' replacingMatchesWith: '%1meh'
Und ich mag das Ergebnis: 'foomeh blah remeh'
. Allerdings gibt mir das nur: '%1meh blah %1meh'
. Ich habe auch versucht, \1
oder \\1
oder $1
oder {1}
zu verwenden, und bekam den Literalstringersatz, z., '\1meh blah \1meh'
als Ergebnis.
Ich kann dies in GNU Smalltalk leicht genug tun mit:
'foobar blah rebar' replacingAllRegex: '(foo|re)bar' with: '%1meh'
Aber ich kann nicht überall in der Pharo regex Dokumentation finden, das mir sagt, wie ich dies in Pharo tun kann. Ich habe auch für Pharo regex gegoogelt, aber nichts gefunden. Ist diese Fähigkeit Teil der RxMatcher-Klasse oder einer anderen Pharo-Regex-Klasse?
es scheint pharo Ersatz nicht unterstützt mit Gruppen Erfassung – rock321987
Nun, haben Sie versucht, die üblichen Rückreferenzierung Stile? Wie '\ 1' oder' \\ 1' oder '$ 1' (vielleicht mit' matchesReplacedWith')? Capturing-Gruppen werden unterstützt. Es ist klar, was Matching in Pharo machen kann, aber es gibt keinen Hinweis darauf, ob Backreferences als Teile von Ersatzmustern unterstützt werden. –
@ WiktorStribiżew Ja, ich habe '\ 1',' \\ 1' und '$ 1' auch versucht. In jedem Fall war die Ersetzung die Literalfolge. Ich habe meine Frage aktualisiert, die diese Versuche anzeigt. Ich sehe, dass das Einfangen von Gruppen unterstützt wird, soweit das Matching geht. In der Dokumentation finden Sie Beispiele zum Erfassen und Aufzählen der Captures. Es wird jedoch nichts über die Rückverweisung in einer Ersetzungszeichenfolge gesagt. Dies scheint grundlegend zu sein, um Regex zu finden/zu ersetzen, also bin ich überrascht, dass es nicht unterstützt wird. – lurker