サーチ…


パラメーター

列をなして説明
$ number グループ番号と一致する部分文字列に置き換えます。
$ {name} 名前の付いたグループ名でマッチした部分文字列に置き換えます。
$$ 結果(置換)文字列でエスケープされた '$'文字。
$& ($ 0) 一致した文字列全体と置き換えます。
$ + ($&) 一致したテキストをキャプチャされた最後のグループに置き換えます。
$ ` 一致するすべてのテキストを、一致する前のすべての一致しないテキストに置き換えます。
$ ' 一致したすべてのテキストを、一致した後のすべての一致しないテキストに置き換えます。
$ _ 一致したすべてのテキストを文字列全体に置き換えます。
注意: イタリック体とは、文字列が揮発性であることを意味します(正規表現の味によって異なります)。

代替の基礎

テキストを正規表現に置き換える最も一般的で便利な方法の1つは、 キャプチャグループを使用することです。
または名前付きキャプチャ・グループであっても、データを格納または置換するための参照として使用できます。

正規表現のドキュメントには2つの用語がよく似ているので、 代入 (つまり$1 )とバックリファレンス (つまり\1 )を混同しないことが重要です。置換用語は置換テキストで使用されます。純粋なRegex式の逆参照。いくつかのプログラミング言語が両方の置換を受け入れても、それは奨励的ではありません。

この正規表現があるとしましょう: /hello(\s+)world/i$numberが参照されるたびに(この場合、 $1 )、 \s+マッチした空白が置き換えられます。
同じ結果が正規表現で公開されます: /hello(?<spaces>\s+)world/i 。ここに名前付きグループがあるので、 ${spaces}も使用でき${spaces}

この同じ例では、 $0または$&使用することもできます( 注: $&は、代わりに他の正規表現エンジンでLASTキャプチャグループを取得する$+として使用できます)。作業する正規表現の味に応じて、一致するテキスト全体を取得します。 ( $&は文字列のhEllo woRldを返します: hEllo woRld of Regex!


$number${name}構文を使って、ジョン・レノンの適応引用符を使って簡単な置換の例を見てみましょう:

シンプルなキャプチャグループの例: 置換例1

名前付きキャプチャグループの例:

置換例2

高度な交換

いくつかのプログラミング言語には、一致したテキストをキャプチャされた最後のグループに置き換える$+ term(C#、Perl、VBなど)のような独自のRegexの特質があります。

例:

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公式の開発者ネットワーク[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公式の開発者ネットワーク[2]の例


最後の代りの代入項は$$ 。これは正規表現に変換されたものは\$ (リテラル$のエスケープされたバージョン)と同じです。

例えば: USD: $3.99ような文字列と一致させたい場合は、 3.99を保存したいが、 $3.99と置き換える正規表現は1つだけです:

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