Regular Expressions
Substitutions avec des expressions régulières
Recherche…
Paramètres
En ligne | La description |
---|---|
nombre $ | Remplace la sous-chaîne par numéro de groupe. |
$ {name} | Remplace la sous-chaîne par un nom de groupe nommé . |
$$ | Caractère échappé '$' dans la chaîne de résultat (remplacement). |
$ & (0 $) | Remplace par la chaîne complète correspondante. |
$ + ($ &) | Remplace le texte correspondant par le dernier groupe capturé. |
$ ` | Remplace tout le texte correspondant par chaque texte non apparié avant le match. |
$ ' | Remplace tout le texte correspondant par chaque texte non apparié après le match. |
$ _ | Remplace tout le texte correspondant à la chaîne entière. |
Remarque: | Les termes en italique signifient que les chaînes sont volatiles (peuvent varier en fonction de votre saveur regex). |
Bases de la substitution
L'une des méthodes les plus courantes et les plus utiles pour remplacer le texte par regex consiste à utiliser des groupes de capture .
Ou même un groupe de capture nommé , comme référence pour stocker ou remplacer les données.
Il y a deux termes très similaires dans les documents de regex, il peut donc être important de ne jamais mélanger les substitutions (c'est- $1
dire $1
) avec les backreferences (c.-à-d. \1
). Les termes de substitution sont utilisés dans un texte de remplacement; Backreferences, dans l'expression pure Regex. Même si certains langages de programmation acceptent les deux pour les substitutions, ce n'est pas encourageant.
Disons que nous avons cette regex: /hello(\s+)world/i
. Chaque fois que $number
est référencé (dans ce cas, $1
), les espaces blancs correspondant à \s+
seront remplacés à la place.
Le même résultat sera exposé avec le regex: /hello(?<spaces>\s+)world/i
. Et comme nous avons un groupe nommé ici, nous pouvons également utiliser ${spaces}
.
Dans ce même exemple, nous pouvons également utiliser $0
ou $&
( Remarque: $&
peut être utilisé comme $+
place, ce qui signifie récupérer le groupe de capture LAST dans d’autres moteurs regex), en fonction du type de regex avec lequel vous travaillez, pour obtenir le texte entier correspondant. (c.- $&
d. $&
renverra hEllo woRld
pour la chaîne: hEllo woRld of Regex!
)
Jetez un coup d'oeil à cet exemple simple de substitution en utilisant le devis adapté de John Lennon en utilisant la syntaxe
$number
et la syntaxe ${name}
: Exemple de groupe de capture simple:
Exemple de groupe de capture nommé:
Remplacement Avancé
Certains langages de programmation ont leurs propres particularités Regex, par exemple le terme $+
(en C #, Perl, VB etc.) qui remplace le texte correspondant au dernier groupe capturé.
Exemple:
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.
Exemple du réseau de développeurs de Microsoft Official [1]
Les autres termes de substitution rares sont
$`
et $'
: $`
= Remplace les correspondances au texte avant la chaîne correspondante
$'
= Remplace les correspondances au texte après la chaîne correspondante
De ce fait, ces chaînes de remplacement devraient faire leur travail comme ceci:
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
Voici un exemple de ces substitutions travaillant sur un morceau de 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"
Il y a aussi le terme
$_
qui récupère tout le texte correspondant à la place: Regex: /part2/
Input: "part1part2part3"
Replacement: "$_"
Output: "part1part1part2part3part3" //Note that part2 was replaced with part1part2part3,
// due $_ term
Convertir ceci en VB nous donnerait ceci:
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
Exemple du réseau de développeurs de Microsoft Official [2]
Et le dernier terme de substitution, mais non le moindre, est $$
, qui traduit en une expression rationnelle serait le même que \$
(version échappée du littéral $ ).
Si vous voulez faire correspondre une chaîne comme ceci: USD: $3.99
par exemple, et que vous voulez stocker le 3.99
, mais le remplacer par $3.99
avec une seule regex, vous pouvez utiliser:
Regex: /USD:\s+\$([\d.]+)/
Input: "USD: $3.99"
Replacement: "$$$1"
To Store: "$1"
Output: "$3.99"
Stored: "3.99"
Si vous souhaitez tester cela avec Javascript, vous pouvez utiliser le code:
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
Les références
[1]: substituer le dernier groupe capturé
[2]: substituer la chaîne de saisie entière