Поиск…


параметры

В соответствии Описание
$ номер Заменяет подстроку, соответствующую номеру группы.
$ {Имя} Заменяет подстроку, соответствующую названию именованной группы .
$$ Исчерпал символ $ $ в строке результата (замены).
$ & ($ 0) Заменяет всю согласованную строку.
$ + ($ &) Заменяет согласованный текст на последнюю захваченную группу.
$ ` Заменяет весь согласованный текст с каждым несогласованным текстом перед матчем.
Заменяет весь согласованный текст с каждым несогласованным текстом после матча.
$ _ Заменяет весь согласованный текст на всю строку.
Замечания: Курсивные термины означают, что строки неустойчивы (могут варьироваться в зависимости от вашего аромата регулярного выражения).

Основы замещения

Одним из наиболее распространенных и полезных способов замены текста с помощью регулярного выражения является использование групп захвата .
Или даже группу Named Capture , как ссылку на хранилище или замену данных.

В документах регулярных выражений довольно похожи друг на друга, поэтому может быть важно никогда не замешать замещения (т.е. $1 ) с Backreferences (т.е. \1 ). Условия замены используются в заменяющем тексте; Backreferences, в чистом выражении Regex. Несмотря на то, что некоторые языки программирования принимают как для замещений, это не обнадеживает.

Будем говорить, что у нас есть это регулярное выражение: /hello(\s+)world/i . Всякий раз, когда ссылается $number (в данном случае $1 ), вместо пробелов будут заменены пробелы, сопоставляемые \s+ .
Тот же результат будет отображаться с помощью регулярного выражения: /hello(?<spaces>\s+)world/i . И поскольку у нас есть именованная группа, мы также можем использовать ${spaces} .

В этом же примере мы также можем использовать $0 или $& ( Примечание: $& вместо этого можно использовать вместо $+ , что означает получение LAST группы захвата в других машинах с регулярными выражениями), в зависимости от используемого вами эффекта regex, чтобы получить весь согласованный текст. (т.е. $& должен возвращать hEllo woRld для строки: hEllo woRld of Regex! )


Взгляните на этот простой пример подстановки, используя адаптированную цитату Джона Леннона, используя синтаксис $number и ${name} :

Пример простой группы захвата: Пример замещения 1

Именованный пример группы захвата:

Пример замещения 2

Расширенная замена

Некоторые языки программирования имеют свои собственные особенности Regex, например, $+ term (в C #, Perl, VB и т. Д.), Который заменяет сопоставленный текст на последнюю захваченную группу.

Пример:

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.

Пример из сети разработчиков Microsoft Official [1]


Другими редкими условиями замены являются $` и $' :

$` = Заменяет совпадения с текстом перед соответствующей строкой
$' = Заменяет совпадения с текстом после соответствующей строки

В связи с этим эти строки замены должны выполнять свою работу следующим образом:

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

Ниже приведен пример этих замещений, работающих над частью 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"

Существует также термин $_ который вместо этого извлекает весь сопоставленный текст:
Regex: /part2/
Input: "part1part2part3"
Replacement: "$_"
Output: "part1part1part2part3part3" //Note that part2 was replaced with part1part2part3,
                                                                         // due $_ term

Преобразование этого в VB даст нам следующее:

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

Пример из сети разработчиков Microsoft Official [2]


И последнее, но не менее важное выражение - $$ , которое переводится в выражение регулярных выражений, будет таким же, как \$ (escape-версия буквального $ ).

Если вы хотите сопоставить строку вроде этого: USD: $3.99 например, и хотите сохранить 3.99 , но замените ее на $3.99 только одним регулярным выражением, вы можете использовать:

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

Если вы хотите проверить это с помощью Javascript, вы можете использовать код:

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

Рекомендации

[1]: Подстановка последней захваченной группы
[2]: Подстановка всей входной строки



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow