Suche…


Parameter

In der Reihe Beschreibung
$ Nummer Ersetzt die durch die Gruppennummer übereinstimmende Unterzeichenfolge.
$ {name} Ersetzt den durch einen benannten Gruppennamen übereinstimmenden Teilstring.
$$ Escape-Zeichen '$' in der Ergebniszeichenfolge (Ersetzung).
$ & ($ 0) Ersetzt mit der gesamten übereinstimmenden Zeichenfolge.
$ + ($ &) Ersetzt den übereinstimmenden Text durch die zuletzt erfasste Gruppe.
$ ` Ersetzt den gesamten übereinstimmenden Text vor dem Match mit jedem nicht übereinstimmenden Text.
$ ' Ersetzt den gesamten abgeglichenen Text nach dem Abgleich mit jedem nicht abgeglichenen Text.
$ _ Ersetzt den gesamten übereinstimmenden Text durch die gesamte Zeichenfolge.
Hinweis: Kursive Ausdrücke bedeuten, dass die Zeichenfolgen flüchtig sind (kann je nach Regex-Geschmack variieren).

Grundlagen der Substitution

Eine der häufigsten und nützlichsten Methoden zum Ersetzen von Text durch reguläre Ausdrücke ist die Verwendung von Capture-Gruppen .
Oder sogar eine benannte Capture-Gruppe als Referenz zum Speichern oder Ersetzen der Daten.

Es gibt zwei Ausdrücke, die in regexs Dokumenten ziemlich gleich aussehen. Daher kann es wichtig sein, Substitutionen (dh $1 ) niemals mit Backreferences (dh \1 ) zu verwechseln . Ersetzungsbedingungen werden in einem Ersetzungstext verwendet. Rückreferenzen, im reinen Regex-Ausdruck. Obwohl einige Programmiersprachen beide für Substitutionen akzeptieren, ist dies nicht ermutigend.

Nehmen wir an, wir haben diese Regex: /hello(\s+)world/i Wenn auf $number verwiesen wird (in diesem Fall $1 ), werden stattdessen die mit \s+ übereinstimmenden Whitespaces ersetzt.
Das gleiche Ergebnis wird mit der Regex: /hello(?<spaces>\s+)world/i . Und da wir hier eine benannte Gruppe haben, können wir auch ${spaces} .

In diesem Beispiel können wir auch $0 oder $& ( Hinweis: Stattdessen kann $& als $+ verwendet werden, um die LAST- Capture-Gruppe in anderen Regex-Engines abzurufen.) um den gesamten passenden Text zu erhalten. (dh $& wird hEllo woRld für die Zeichenfolge zurückgeben: hEllo woRld of Regex! )


Sehen Sie sich dieses einfache Beispiel für die Ersetzung mit dem angepassten Zitat von John Lennon mithilfe der $number und der ${name} -Syntax an:

Einfaches Beispiel für eine Capture-Gruppe: Substitutionsbeispiel 1

Benanntes Erfassungsgruppenbeispiel:

Substitutionsbeispiel 2

Erweiterter Ersatz

Einige Programmiersprachen haben eigene Regex-Besonderheiten, beispielsweise den $+ Ausdruck (in C #, Perl, VB usw.), der den übereinstimmenden Text der zuletzt erfassten Gruppe ersetzt.

Beispiel:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b(\w+)\s\1\b";
      string substitution = "$+";
      string input = "The the dog jumped over the fence fence.";
      Console.WriteLine(Regex.Replace(input, pattern, substitution, 
                        RegexOptions.IgnoreCase));
   }
}
// The example displays the following output:
//      The dog jumped over the fence.

Beispiel aus dem Developer Network von Microsoft Official [1]


Andere seltene Substitutionsbedingungen sind $` und $' :

$` = Ersetzt Übereinstimmungen mit dem Text vor der übereinstimmenden Zeichenfolge
$' = Ersetzt Übereinstimmungen mit dem Text nach der übereinstimmenden Zeichenfolge

Aus diesem Grund sollten diese Ersetzungszeichenfolgen ihre Arbeit so ausführen:

Regex: /part2/
Input: "part1part2part3"
Replacement: "$`"
Output: "part1part1part3" //Note that part2 was replaced with part1, due &` term
---------------------------------------------------------------------------------
Regex: /part2/
Input: "part1part2part3"
Replacement: "$'"
Output: "part1part3part3" //Note that part2 was replaced with part3, due &' term

Hier ist ein Beispiel für diese Ersetzungen, die an einem Javascript arbeiten:

var rgx = /middle/;
var text = "Your story must have a beginning, middle, and end"
console.log(text.replace(rgx, "$`")); 
//Logs: "Your story must have a beginning, Your story must have a beginning, , and end"
console.log(text.replace(rgx, "$'"))
//Logs: "Your story must have a beginning, , and end, and end"

Es gibt auch den Begriff $_ der stattdessen den gesamten übereinstimmenden Text abruft:
Regex: /part2/
Input: "part1part2part3"
Replacement: "$_"
Output: "part1part1part2part3part3" //Note that part2 was replaced with part1part2part3,
                                                                         // due $_ term

Das Konvertieren in VB würde uns folgendes geben:

Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "ABC123DEF456"
      Dim pattern As String = "\d+"
      Dim substitution As String = "$_"
      Console.WriteLine("Original string:          {0}", input)
      Console.WriteLine("String with substitution: {0}", _
                        Regex.Replace(input, pattern, substitution))      
   End Sub
End Module
' The example displays the following output:
'       Original string:          ABC123DEF456
'       String with substitution: ABCABC123DEF456DEFABC123DEF456

Beispiel aus dem Developer Network von Microsoft Official [2]


Und der letzte und nicht zuletzt ersetzende Begriff ist $$ , der in einen Regex-Ausdruck übersetzt würde, wäre derselbe wie \$ (Eine Escape-Version des Buchstabens $ ).

Wenn Sie eine Zeichenfolge wie USD: $3.99 möchten: USD: $3.99 zum Beispiel und die 3.99 speichern, aber als $3.99 durch nur einen Regex ersetzen, können Sie Folgendes verwenden:

Regex: /USD:\s+\$([\d.]+)/
Input: "USD: $3.99"
Replacement: "$$$1"
To Store: "$1"
Output: "$3.99"
Stored: "3.99"

Wenn Sie dies mit Javascript testen möchten, können Sie den Code verwenden:

var rgx = /USD:\s+\$([\d.]+)/;
var text = "USD: $3.99";
var stored = parseFloat(rgx.exec(text)[1]);
console.log(stored); //Logs 3.99
console.log(text.replace(rgx, "$$$1")); //Logs $3.99

Verweise

[1]: Ersetzen der zuletzt erfassten Gruppe
[2]: Ersetzen der gesamten Eingabezeichenfolge



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow