文字のエスケープ
更新 : 2010 年 5 月
正規表現の円記号 (\) は、次のいずれかを示します。
後に続く文字が、次のセクションの表に示す特殊文字であること。 たとえば、\b は、正規表現の一致がワード境界から開始する必要があることを示すアンカーであり、\t はタブを表します。\x020 は空白を表します。
エスケープされていない言語構成要素として解釈される文字は、文字どおりに解釈する必要があること。 たとえば、中かっこ ({) は量指定子の定義を開始しますが、円記号とそれに続く中かっこ (\{) は、正規表現エンジンで中かっこに一致させる必要があることを示します。 同様に、1 つの円記号はエスケープされた言語構成要素の開始を示しますが、2 つの円記号 (\\) は、正規表現エンジンで円記号に一致させる必要があることを示します。
メモ |
---|
文字エスケープは、正規表現では認識されますが、置換パターンでは認識されません。 |
.NET Framework の文字エスケープ
次の表は、.NET Framework の正規表現でサポートされている文字エスケープの一覧です。
文字または文字シーケンス |
説明 |
---|---|
次の文字を除くすべての文字: . $ ^ { [ ( | ) * + ? \ |
これらの文字は、正規表現で特殊な意味を持たず、その文字自体と一致します。 |
\a |
ビープ音 (アラーム) 文字の \u0007 と一致します。 |
\b |
[文字グループ] 文字クラスでは、バックスペースの \u0008 と一致します (「文字クラス」を参照)。 文字クラスの外部では、\b はワード境界と一致するアンカーです (「正規表現のアンカー」を参照)。 |
\t |
タブの \u0009 と一致します。 |
\r |
キャリッジ リターンの \u000D と一致します。 \r の機能は \n という改行文字と同じではありません。 |
\v |
垂直タブの \u000B と一致します。 |
\f |
フォーム フィードの \u000C と一致します。 |
\n |
改行文字の \u000A と一致します。 |
\e |
エスケープ文字の \u001B と一致します。 |
\nnn |
ASCII 文字と一致します。nnn は、8 進文字コードを表す 3 桁までの桁で構成されます。 たとえば、\040 は、空白文字を表します。 ただし、この構成要素は、1 桁のみの場合 (たとえば、\2 など)、またはキャプチャ グループの番号に対応する場合には前方参照として解釈されます。 (「前方参照構成体」を参照)。 |
\xnn |
ASCII 文字と一致します。nn は 2 桁の 16 進文字コードです。 |
\cX |
ASCII の制御文字と一致します。X は制御文字です。 たとえば、\cC は CTRL-C です。 |
\unnnn |
Unicode 文字と一致します。nnnn は 4 桁の 16 進コード ポイントです。
メモ
.NET Framework では、Unicode を指定するために使用する Perl5 の文字エスケープはサポートされません。Perl 5 の文字エスケープは \x{####…} の形式です。ここで、####… は一連の 16 進数字です。代わりに \unnnn を使用してください。
|
\ |
エスケープ文字として認識されない文字が後ろに付いている場合は、その文字と一致します。 たとえば、\* はアスタリスク (*) と一致し、\x2A と同じです。 |
例
正規表現の文字エスケープの使用例を次に示します。 2009 年の世界最大規模の都市の名前と人口を含む文字列を解析します。 個々の都市の名前は、タブ (\t) または縦棒 (| または \u007c) で人口と区切られています。 個々の都市とその人口は、復帰とライン フィードで互いに区切られています。
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim delimited As String = "\G(.+)[\t\u007c](.+)\r?\n"
Dim input As String = "Mumbai, India|13,922,125" + vbCrLf + _
"Shanghai, China" + vbTab + "13,831,900" + vbCrLf + _
"Karachi, Pakistan|12,991,000" + vbCrLf + _
"Dehli, India" + vbTab + "12,259,230" + vbCrLf + _
"Istanbul, Turkey|11,372,613" + vbCrLf
Console.WriteLine("Population of the World's Largest Cities, 2009")
Console.WriteLine()
Console.WriteLine("{0,-20} {1,10}", "City", "Population")
Console.WriteLine()
For Each match As Match In Regex.Matches(input, delimited)
Console.WriteLine("{0,-20} {1,10}", match.Groups(1).Value, _
match.Groups(2).Value)
Next
End Sub
End Module
' The example displays the following output:
' Population of the World's Largest Cities, 2009
'
' City Population
'
' Mumbai, India 13,922,125
' Shanghai, China 13,831,900
' Karachi, Pakistan 12,991,000
' Dehli, India 12,259,230
' Istanbul, Turkey 11,372,613
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string delimited = @"\G(.+)[\t\u007c](.+)\r?\n";
string input = "Mumbai, India|13,922,125\t\n" +
"Shanghai, China\t13,831,900\n" +
"Karachi, Pakistan|12,991,000\n" +
"Dehli, India\t12,259,230\n" +
"Istanbul, Turkey|11,372,613\n";
Console.WriteLine("Population of the World's Largest Cities, 2009");
Console.WriteLine();
Console.WriteLine("{0,-20} {1,10}", "City", "Population");
Console.WriteLine();
foreach (Match match in Regex.Matches(input, delimited))
Console.WriteLine("{0,-20} {1,10}", match.Groups[1].Value,
match.Groups[2].Value);
}
}
// The example displyas the following output:
// Population of the World's Largest Cities, 2009
//
// City Population
//
// Mumbai, India 13,922,125
// Shanghai, China 13,831,900
// Karachi, Pakistan 12,991,000
// Dehli, India 12,259,230
// Istanbul, Turkey 11,372,613
正規表現 \G(.+)[\t|\u007c](.+)\r?\n の解釈を次の表に示します。
パターン |
説明 |
---|---|
\G |
最後の一致の終了位置から照合を開始します。 |
(.+) |
任意の文字と 1 回以上、一致します。 これが最初のキャプチャ グループです。 |
[\t\u007c] |
タブ (\t) または縦棒 (|) と一致します。 |
(.+) |
任意の文字と 1 回以上、一致します。 これが 2 番目のキャプチャ グループです。 |
\r? \n |
復帰とそれに続く改行に、0 回または 1 回一致します。 |
参照
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 5 月 |
正規表現パターンを修正しました。 |
カスタマー フィードバック |