Regular Expressions
Ersetzungen mit regulären Ausdrücken
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:
Benanntes Erfassungsgruppenbeispiel:
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