C# の正規表現
正規表現は、入力テキストと一致するパターンです。 .Net フレームワークは、このような照合を可能にする正規表現エンジンを提供します。パターンは、1 つ以上の文字、演算子、および構造体で構成されます。
正規表現を定義する
以下に、正規表現の定義に使用される文字、演算子、構造体のさまざまなカテゴリを示します。
キャラクターエスケープ
キャラクタークラス
アンカー
グループ構築
修飾子
後方参照構築
代替工事
交換
その他構築
文字エスケープ
正規表現内のバックスラッシュ文字 ( ) は、その後に続く文字が特殊文字であるか、文字が文字通り解釈される必要があることを示します。
次の表にエスケープ文字を示します:
エスケープ文字 | 説明 | パターン | は | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a | と一致し、アラーム (ベル) シンボル u0007 と一致します。文字クラスの | a | 「警告!」 +「u0007」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
b | は、バックスペース キー u0008 と一致します。 | [b]{3,} | 「bbbb」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
t | の「bbbb」はタブ文字u0009と一致します。 | (w+)t | "NametAddrt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
r | の"Namet"と"Addrt"は復帰文字u000Dと一致します。 (r は改行文字 n と同等ではありません。) | rn(w+) | 「rHellonWorld」の「rnHello」は、垂直タブ u000B と一致します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
「vvv」 | f | の「vvv」は、フォームフィード文字u000Cと一致します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
「fff」 | n | の「fff」は改行文字u000Aと一致します。 "rnHello" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
e | の | rn(w+) | "rHellonWorld."はエスケープ文字u001Bと一致します。 「x001B」の | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
「x001B」 | nnn | は、文字を8進数表現で指定します(nnnは2~3桁)。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
は、X または x で指定された ASCII 制御文字と一致します。X または x は制御文字の文字です。 | cC「x0003」(Ctrl-C)の「x0003」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
は、Unicode文字(nnnnで表される4桁の数字)を16進表現で照合します。 | wu0020w「a bc d」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
の「a b」と「c d」は、認識できないエスケープ文字が後に続く場合に一致します。 | d+[+-x*]d+d+[+-x*d+"(2+2) * 3*9" in "2+2" と "3*9" |
文字クラス | の説明 | パターン | は |
---|---|---|---|
と一致します [character_group] | はcharacter_group内の任意の単一文字と一致します。 デフォルトでは、照合では大文字と小文字が区別されます。 | [mn] | 「mat」の「m」、「moon」の「m」と「n」 |
[^character_group] | Non:character_group に含まれない任意の 1 文字と一致。 デフォルトでは、character_group 内の文字は大文字と小文字が区別されます。 | [^aei] | 「avail」の「v」と「l」 |
[ first - last ] | 文字範囲: 最初から最後までの範囲内の任意の 1 文字と一致します。 | (w+)t | 「NametAddrt」の「Namet」と「Addrt」 |
. | ワイルドカード: n を除く任意の 1 文字と一致します。 元のピリオド文字 (. または u002E) と一致させるには、文字の前にエスケープ文字 (.) を付ける必要があります。 | a.e | 「have」の「ave」、「mate」の「ate」 |
p{ name } | および name 単一の Unicode ユニバーサル カテゴリまたは名前付きブロックの指定 文字マッチング。 | p{Lu} | 「City Lights」 |
P{ name } | の「C」と「L」は、で指定されていない単一のUnicodeユニバーサルカテゴリまたは名前付きブロックと同じではありません名前 文字の一致。 | P{Lu} | 「City」 |
w | の「i」、「t」、「y」は、任意の単語文字と一致します。 | w | 「Room#1」の「R」、「o」、「m」、「1」 |
W | は、単語以外の文字と一致します。 | W | "Room#1" |
s | の「#」は、任意の空白文字と一致します。 | ws | 「ID A1.3」の「D」 |
S | は、任意の非空白文字と一致します。 | sS | 「int __ctr」 |
d | の「_」は、任意の10進数の数字と一致します。 | d | 「4 = IV」 |
D | の「4」は、10進数ではない任意の文字と一致します。 | D | 「4 = IV」の「」、「=」、「」、「I」と「V」 |
アンカー
アンカーまたはアトミックゼロ幅アサーションは、文字列内の現在位置に応じて一致が成功または失敗しますが、エンジンが文字列内で進んだり、文字を使用したりすることはありません。
アンカー ポイントを次の表に示します。
アサーション | 説明 | パターン | 一致 |
---|---|---|---|
^ | 一致は文字列または行の先頭から開始する必要があります。 | ^d{3} | "567-777-" |
$ | の「567」は、文字列の末尾、または行または文字列の末尾の n より前に出現する必要があります。 | -d{4}$ | "8-12-2012" |
A | の「-2012」は文字列の先頭に出現する必要があります。 | Aw{4} | "Code-007-" |
Z | の「コード」は、文字列の末尾、または文字列の末尾の n の前に出現する必要があります。 | -d{3}Z | "Bond-901-007" |
z | の「-007」は文字列の末尾に表示される必要があります。 | -d{3}z | "-901-333" |
G | の「-333」は、前の一致が終了する場所に表示される必要があります。 | \G(d) | の「(1)」「(3)」「(5)」「(1)(3)(5)[7](9)」 |
b | 一致は、w (英数字) 文字と W (英数字以外) 文字の間の境界で発生する必要があります。 | w | 「Room#1」 |
B | の「R」、「o」、「m」、「1」の一致は、bの境界上で発生してはなりません。 | Bendw*b | 「エンドはレンダーを送ります」の「エンド」と「エンダー」 |
グループ構造
グループ構造は正規表現の部分式を記述し、通常は入力文字列の部分文字列をキャプチャするために使用されます。
次の表に、グループ化構成要素を示します。
グループ化構成要素 | 説明 | パターン | 一致 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
(部分式) | 一致をキャプチャします部分式を編集し、それをゼロベースの に代入します。シリアルナンバー。 | (w)1 | "ee" in "deep" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?< name >subexpression) | は、一致する部分式を名前付きグループにキャプチャします。 | (?<double>w)k<double> | "deep" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?<name1 -name2>subexpression) | の「ee」はバランスの取れたグループの定義を定義します。 | (((?'開く'()[^()]*)+((?'閉じる-開く'))[^()]*)+)*(?(開く)(?!))$ | "((1-3)*(3-1))" in "3+2^((1-3)*(3-1))" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?:部分式) | 非キャプチャグループを定義します。 | Write(?:Line)? | 「Console.WriteLine()」の「WriteLine」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?imnsx-imnsx:subexpression) | は、subexpressionで指定されたオプションを適用または無効にします。 | Ad{2}(?i:w+)b | 「A12xl A12XL a12xl」内の「A12xl」および「A12XL」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?= 部分式) | ゼロ幅の正の先読みアサーション。 | w+(?=.) | 「彼はいます。犬は走りました。太陽が出ています。」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?!部分表現)の「is」、「ran」、「out」幅ゼロの否定先読みアサーション。 | b(?!un)w+b「確実」と「使用済み」の「不明確実な単一性使用」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
アサーションはゼロを確認した後に行われます幅 。 | (?<=19)d{2}b"1851 1999 1950 1905 2003" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ゼロ幅のネガティブ ルックバック アサーション。 | (?< !19)d{2}b「endsendsendendenderlender」の「ends」と「ender」 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
非バックデート(別名) "greedy" と同様) 部分表現。 | [13579](?>A+B+)「1ABB 3ABBC 5AB 5AC」の「1ABB」、「3ABB」、「5AB」 |
修飾子 | 説明 | パターン | 一致 |
---|---|---|---|
* | 前の要素と 0 回以上一致します。 | d*.d | ".0", "19.9", "219.9" |
+ | は、前の要素と 1 回以上一致します。 | 「be+」 | 「bee」の「been」、「bent」の「be」 |
? | は、前の要素と 0 回または 1 回一致します。 | "rai?n" | "ran", "rain" |
{ n } | は、前の要素と正確に n 回一致します。 | ",d{3}" | "",043" in "1,043.6"、",876"、",543"、および ",210" in "9,876,543,210" |
{ n ,} | 前の要素と少なくとも n 回一致します。 | "d{2,}" | "166", "29", "1930" |
{ n , m } | 前の要素と少なくとも n 回一致しますが、m 回以下です。 | 「d{3,5}」 | 「166」、「17668」、 "193024" の "19302" |
*? | は、前の要素と 0 回以上、ただし可能な限り少ない回数一致します。 | d*?.d | ".0", "19.9", "219.9" |
+? | 前の要素と 1 回以上、ただし可能な限り少ない回数一致します。 | 「be+?」 | 「been」の「be」、「bent」の「be」 |
?? | は、前の要素と 0 回または 1 回一致しますが、できるだけ少ない回数で一致します。 | "rai??n" | "ran", "rain" |
{ n }? | は先頭の要素と正確に n 回一致します。 | ",d{3}?",043" in " | "1,043.6"、",876"、",543" および ",210" in "9,876,543,210" |
{ n ,} ? | 前の要素と少なくとも n 回、ただし可能な限り少ない回数一致します。 | "d{2,}?" | "166"、"29"、および "1930" |
{ n , m }? | 前の要素が一致した回数は n からm ですが、できるだけ少ない回数にしてください。 | 「d{3,5}?」 | "166", "17668", 「193024」の「193」と「024」 |
後方参照の構築
後方参照を使用すると、同じ正規表現内で以前に一致した部分式を後から識別できます。
次の表は、後方参照構造のリストです。
後方参照構造 | 説明 | パターン | は |
---|---|---|---|
番号 | 後方参照と一致します。 数値の部分式の値と一致します。 | (w)1 | 「ee」の「seek」 |
k<名前> | の名前付き後方参照。 名前付き式の値と一致します。(?< char>w)k< char> | "ee" in "seek" |
説明 | パターン | は、 | |||
---|---|---|---|---|---|
と一致します| | は、垂直バーで区切られた任意の1つの要素と一致します(| )のキャラクター。th(e|is|at)の「the」と「this」 | 「this is the day.」 | |||
(?(式)yes | no ) | if 正規表現パターン 指定されている場合式の一致により、それはyes と一致し、それ以外の場合は、オプションの no 部分と一致します。式はゼロ幅アサーションとして解釈されます。 | (?(A)Ad{2}b|bd{3}b)「A10 C103 910」の「A10」と「910」 | |||
(?(名前)はい | いいえ) | 名前または名前付きまたは番号付きキャプチャ グループが一致する場合はyes と一致し、それ以外の場合はオプションの no と一致します。 | (?<引用>")?(?(引用).+?"|S+s)「Yiska遊び.jpg」内の「Dogs.jpg」と「Yiska遊び.jpg」 |
文字 | 説明 | パターン | 置換パターン | 入力文字列 | 結果文字列 |
---|---|---|---|---|---|
$ number | 部分文字列の置換一致グループ番号。 | b(w+)(s)(w+)b | $3$2$1 | "one two" | "two one" |
${name} | 名前付きグループnameで置き換えます 一致する部分文字列。 | b(?< word1>w+)(s)(?< word2>w+)b | ${word2} ${word1} | 「ワンツー」 | 「ツーワン」 |
$$ | は文字「$」を置き換えます。 | b(d+)s?USD | $$$1 | "103 USD" | "$103" |
$& | は、一致全体のコピーを置き換えます。 | ($*(d*(.+d+)?){1}) | **$& | "$1.30" | "**$1.30**" |
$` | 置換前の入力文字列のすべてのテキストと一致します。 | B+ | $` | "AABBCC" | "AAAACC" |
$' | 一致した入力文字列のすべてのテキストを置換します。 | B+ | $' | "AABBCC" | "AACCC" |
$+ | は、最後にキャプチャされたグループを置き換えます。 | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | は、入力文字列全体を置き換えます。 | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
その他の構成要素
次の表は、さまざまなその他の構成要素
Construction | を示しています。説明 | 例 |
---|---|---|
(?imnsx-imnsx) | モードの途中で大文字と小文字を区別しないなどのオプションを設定または無効にします。 | bA(?i)bw+b は、「ABA Able Act」 |
(?#comment) | インラインコメントの「ABA」と「Able」に一致します。コメントは最初の閉じ括弧で終了します。 | bA(?#Aで始まる単語と一致します)w+b |
# [行末] | コメントはエスケープされていない # で始まり、行末まで続きます。 | (?x)bAw+b# は A で始まる単語と一致します |
Regexクラス
Regexクラスは正規表現を表すために使用されます。
次の表は、Regex クラスで一般的に使用されるいくつかのメソッドを示しています。 文字列入力 )
2 | |
---|---|
Regex コンストラクターで指定された正規表現が、文字列内の指定された開始位置から始まる指定された入力文字列内で一致を見つけるかどうかを示します。 | 3 |
指定された入力文字列内で指定された正規表現が一致するかどうかを示します。 | 4 |
指定された入力文字列内で出現する正規表現をすべて検索します。 | 5 |
指定された入力文字列内で、正規表現パターンに一致するすべての一致文字列を、指定された置換文字列に置き換えます。 | 6 |
Regex コンストラクターで指定された正規表現パターンで定義された位置に基づいて、入力文字列を部分文字列の配列に分割します。 | Regex クラスのプロパティの完全なリストについては、Microsoft の C# ドキュメントを参照してください。 |
次の例は、'S' で始まる単語と一致します: | 上記のコードがコンパイルされて実行されると、次の結果が生成されます: Matching words that start with 'S': The Expression: \bS\S* Splendid Suns例 2 | 次の例は、' で始まる単語と一致します。 S' 'm' で始まり 'e' で終わる単語:
Matching words start with 'm' and ends with 'e': The Expression: \bm\S*e\b make maze manage measure
例 3
次の例は、余分なスペースを置き換えます:
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { static void Main(string[] args) { string input = "Hello World "; string pattern = "\s+"; string replacement = " "; Regex rgx = new Regex(pattern); string result = rgx.Replace(input, replacement); Console.WriteLine("Original String: {0}", input); Console.WriteLine("Replacement String: {0}", result); Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます:
Original String: Hello World Replacement String: Hello World