Ersetzen für die gesamte Zeile erzeugt ein doppeltes Auftreten von Ersatztext

8

Einfache Frage: Warum macht

%Vor%

produzieren "yy"?

    
Elroy Flynn 30.11.2011, 06:40
quelle

2 Antworten

8
%Vor%

ist das Äquivalent von

%Vor%

Das Ergebnis yy , das Sie sehen, basiert auf der Funktionsweise gemäß MSDN:

  

ersetzt innerhalb einer angegebenen Eingabezeichenfolge alle Zeichenfolgen , die mit a übereinstimmen   angegebener regulärer Ausdruck mit einer angegebenen Ersetzungszeichenfolge.

Ссылка

Die Ersetzung findet eine Zeichenfolge, die dem regulären Ausdruck entspricht, und ersetzt sie durch die angegebene Ersetzung. Daher wird das x durch y ersetzt und dann wird die leere Zeichenfolge durch y ersetzt und Sie erhalten yy .

Dies kann verifiziert werden, indem man [Regex]::matches("x",".*") tut - es gibt zwei Übereinstimmungen - eine für eine leere Zeichenfolge und eine für x.

In Bezug auf andere Engines mit regulärem Ausdruck geschieht dies aufgrund des g oder des globalen Flags.

Dies kann auch in Python wie folgt überprüft werden (um zu zeigen, dass dies nicht auf Powershell / .Net beschränkt ist):

%Vor%     
manojlds 30.11.2011, 08:50
quelle
4

Da du zwei Übereinstimmungen hast, stimmt * zuerst mit der gesamten Zeichenfolge überein, da es gierig ist. Und dann stimmt es mit nichts überein. Danke an @Tim für seinen Kommentar.

Was Sie verwenden sollten, ist .+ .

    
FailedDev 30.11.2011 07:16
quelle

Tags und Links