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 substitution 1

Exemple de groupe de capture nommé:

Exemple de substitution 2

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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow