Regular Expressions
Podstawienia wyrażeniami regularnymi
Szukaj…
Parametry
| Inline | Opis |
|---|---|
| numer $ | Zastępuje podciąg zgodny z numerem grupy. |
| $ {nazwa} | Zastępuje podciąg zgodny z nazwaną nazwą grupy . |
| $$ | W ciągu wyniku (zamiany) zmieniono znak „$”. |
| $ I (0 $) | Zastępuje cały dopasowany ciąg. |
| $ + ($ &) | Zastępuje dopasowany tekst do ostatniej przechwyconej grupy. |
| $ ` | Zastępuje cały dopasowany tekst każdym niedopasowanym tekstem przed dopasowaniem. |
| $ ' | Zastępuje cały dopasowany tekst każdym niedopasowanym tekstem po dopasowaniu. |
| _ _ | Zastępuje cały dopasowany tekst całym ciągiem. |
| Uwaga: | Kursywa oznacza, że łańcuchy są lotne (mogą się różnić w zależności od smaku wyrażenia regularnego). |
Podstawy podstawienia
Jednym z najczęstszych i najbardziej przydatnych sposobów zastąpienia tekstu wyrażeniem regularnym jest użycie grup przechwytywania .
Lub nawet Named Capture Group , jako odniesienie do przechowywania lub wymiany danych.
W dokumentach regex istnieją dwa podobne terminy, więc może być ważne, aby nigdy nie mieszać podstawień (tj. $1 ) z odwołaniami wstecznymi (tj. \1 ). Warunki zamiany są używane w tekście zastępczym; Odwołania wsteczne, w czystym wyrażeniu Regex. Chociaż niektóre języki programowania akceptują oba zamienniki, nie jest zachęcające.
Powiedzmy, że mamy to wyrażenie regularne: /hello(\s+)world/i . Ilekroć przywołuje się $number (w tym przypadku $1 ), białe znaki dopasowane przez \s+ zostaną zastąpione.
Ten sam wynik zostanie ujawniony za pomocą wyrażenia regularnego: /hello(?<spaces>\s+)world/i . Ponieważ mamy tutaj nazwaną grupę, możemy również użyć ${spaces} .
W tym samym przykładzie możemy również użyć $0 lub $& ( Uwaga: $& może być zamiast tego użyte jako $+ , co oznacza, że można odzyskać OSTATNĄ grupę przechwytywania w innych silnikach wyrażeń regularnych), w zależności od smaku wyrażenia regularnego, z którym pracujesz, aby uzyskać cały dopasowany tekst. (tzn. $& zwróci hEllo woRld dla ciągu: hEllo woRld of Regex! )
Spójrz na ten prosty przykład podstawienia z wykorzystaniem dostosowanego cytatu Johna Lennona, używając składni
$number i składni ${name} : Prosty przykład grupy przechwytywania:
Przykład nazwanej grupy przechwytywania:
Zaawansowana wymiana
Niektóre języki programowania mają swoje osobliwości Regex, na przykład $+ term (w C #, Perl, VB itp.), Który zastępuje dopasowany tekst do ostatniej przechwyconej grupy.
Przykład:
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.
Przykład z sieci programistów Microsoft Official [1]
Inne rzadkie warunki zastępowania to
$` i $' : $` = Zamienia dopasowania do tekstu przed pasującym ciągiem
$' = Zamienia dopasowania do tekstu po dopasowanym ciągu
Z tego powodu ciągi zastępujące powinny wykonywać swoją pracę w następujący sposób:
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
Oto przykład tych podstawień działających na kawałku javascript:
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"
Istnieje również termin
$_ który zamiast tego pobiera cały dopasowany tekst: Regex: /part2/
Input: "part1part2part3"
Replacement: "$_"
Output: "part1part1part2part3part3" //Note that part2 was replaced with part1part2part3,
// due $_ term
Konwersja tego na VB dałaby nam to:
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
Przykład z sieci programistów Microsoft Official [2]
Ostatnim, ale nie mniej ważnym terminem podstawienia jest $$ , które przetłumaczone na wyrażenie regularne byłoby takie samo jak \$ (uciekająca wersja dosłownego $ ).
Jeśli chcesz dopasować ciąg taki jak na przykład: USD: $3.99 i chcesz zapisać 3.99 , ale zastąp go jako $3.99 tylko jednym wyrażeniem regularnym, możesz użyć:
Regex: /USD:\s+\$([\d.]+)/
Input: "USD: $3.99"
Replacement: "$$$1"
To Store: "$1"
Output: "$3.99"
Stored: "3.99"
Jeśli chcesz to przetestować za pomocą Javascript, możesz użyć kodu:
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
Bibliografia
[1]: Zastępowanie ostatniej schwytanej grupy
[2]: Podstawianie całego ciągu wejściowego
