ホームページ >バックエンド開発 >C#.Net チュートリアル >[C# チュートリアル] C# 正規表現

[C# チュートリアル] C# 正規表現

黄舟
黄舟オリジナル
2016-12-24 13:37:521100ブラウズ

C# 正規表現

正規表現は、入力テキストと一致するパターンです。 .Net フレームワークは、この種の照合を可能にする正規表現エンジンを提供します。パターンは、1 つ以上の文字、演算子、および構造体で構成されます。

正規表現を定義する

以下に、正規表現の定義に使用される文字、演算子、構造体のさまざまなカテゴリを示します。

文字エスケープ

文字クラス

アンカー

グループ構成

修飾子

後方参照構成

代替構成

置換

その他の構成

文字エスケープ

正規表現内のバックスラッシュ文字 () は、それに続く文字が特殊文字であるか、文字が文字通りに解釈される必要があることを示します。

次の表にエスケープ文字を示します。

エスケープ文字

説明

パターン

match

a アラーム (ベル) シンボル u0007 と一致します。 a "警告!" + "u0007"

b 文字クラスでは、バックスペース キー u0008 と一致します。 [b]{3,} "bbbb" の "bbbb"

はタブ文字 u0009 と一致します。 (w+)t "NametAddrt" の "Namet" と "Addrt"

r は復帰文字 u000D と一致します。 (r は改行文字 n と同等ではありません。) 「rHellonWorld.」の rn(w+) 「rnHello」

v は垂直タブ文字 u000B と一致します。 [v]{2,} "vvv"

f の "vvv" は、フォーム フィード文字 u000C と一致します。 [f]{2,} "fff"

n の "fff" は改行文字 u000A と一致します。 rn(w+) 「rHellonWorld」の「rnHello」はエスケープ文字 u001B と一致します。 e 「x001B」の「x001B」

nnnは8進数表現で文字を指定します(nnnは2~3桁)。 w

p{ name } Unicode ユニバーサル カテゴリ内の任意の 1 文字、または name で指定された名前付きブロックと一致します。 「City Lights」

P{ name } の「C」と「L」は、Unicode ユニバーサル カテゴリまたは name で指定された名前付きブロックにない任意の 1 文字と一致します。 P{Lu} 「City」

w の「i」、「t」、「y」は、任意の単語文字に一致します。 w 「Room#1」の「R」、「o」、「m」、「1」

W は単語以外の文字に一致します。 W "Room#1"

の "#" は任意の空白文字と一致します。 ws "ID A1.3"

S の "D" は、空白以外の文字と一致します。 sS "int __ctr"

d の " _" は、任意の 10 進数に一致します。 d の "4" "4 = IV"

D は、10 進数ではない任意の文字と一致します。 "4 = IV" の D " "、"="、" "、"I" および "V"

アンカー

アンカーまたはアトミックなゼロ幅アサーションにより、文字列に応じて一致が成功または失敗します。ただし、エンジンが文字列内で進んだり、文字を使用したりすることはありません。

次の表にアンカー ポイントを示します:

アサーション

説明

パターン

一致

^ 一致は文字列または行の先頭から開始する必要があります。 ^d{3} "567" in "567-777-"

$ 一致は文字列の末尾、または行または文字列の末尾の n より前に発生する必要があります。 -d{4}$ "-2012" in "8-12-2012"

A 一致は文字列の先頭に現れる必要があります。 Aw{3} "Code-007-" の "Code"

Z 一致は文字列の末尾、または文字列末尾の n の前に出現する必要があります。 -d{3}Z "-007" in "Bond-901-007"

z 一致するものは文字列の末尾にある必要があります。 -d{3}z "-901-333" の "-333"

G 一致は前の一致の最後に表示される必要があります。 \G(d) "(1)(3)(5)[7](9)" 一致する "(1)"、"(3)"、および "(5)"

b は w( on に出現する必要があります英数字) と W (英数字以外) 文字の間の境界。 w 「Room#1」の「R」、「o」、「m」、「1」

B の境界で B の一致が発生してはなりません。 Bendw*b「endsendsendendlender」の「ends」と「ender」

グループ構築

グループ構築は、通常、入力文字列の部分文字列をキャプチャするために使用される正規表現の部分式を記述します。

次の表は、グループ化構成要素のリストです。

グループ化構成要素

説明

パターン

一致

( subexpression ) 一致する部分式をキャプチャし、それを 0 から始まるシーケンス番号に割り当てます。 (w)1 "ee" in "deep"

(?2dd749663259a7ede2528ec9cca95d77subexpression) 一致する部分式を名前付きグループにキャプチャします。 (?f5fbfbee748f450acbec5bd3114a2e8bw)kf5fbfbee748f450acbec5bd3114a2e8b "ee" in "deep"

(?30a878cd74d918ee999c6783be1410a8subexpression) は、バランシング グループの定義を定義します。 (((?'開く'()[^()]*)+((?'閉じる-開く'))[^()]*)+)*(?(開く)(?!))$ "3 "((1-3)*(3-1))" in +2^((1-3)*(3-1))"

(?: 部分式) は非キャプチャ グループを定義します。 Write(?:Line)? "Console.WriteLine()" の "WriteLine"

(?imnsx-imnsx:subexpression) subexpression で指定されたオプションを適用または無効にします。 Ad{2}(?i:w+)b "A12xl" および "A12XL" in "A12xl A12XL a12xl"

(?= 部分式) ゼロ幅の正の先読みアサーション。 w+(?=.) 「彼はいます。犬は走りました。太陽が出ています

」の「です」、「走った」、「出た」。

(?! 部分式) ゼロ幅の否定先読みアサーション。 b(?!un)w+b "sure" と "unsuresure Union used" の "used"

(?b033b96ebb0da24e2d5a149465570e84 部分式) 非バックトラック (「貪欲」とも呼ばれる) 部分式。 [13579](?>A+B+) "1ABB 3ABBC 5AB 5AC" の "1ABB"、"3ABB"、および "5AB"

修飾子

修飾子は、前の要素が入力文字列に存在する必要があることを指定します (いくつ一致するには、文字、グループ、または文字クラスのインスタンスが必要です。 修飾子には、次の表にリストされている言語要素が含まれます。

次の表に修飾子を示します。

修飾子

説明

パターン

一致

* 前の要素と 0 回以上一致します。 d*.d ".0", "19.9", "219.9"

+ 前の要素と 1 回以上一致します。 "be+" "been" の "bee"、"bent" の "be"

? 前の要素と 0 回または 1 回一致します。 "rai?n" "ran", "rain"

{ n } 前の要素と正確に n 回一致します。 「1,043.6」の「,d{3}」「,043」、「9,876,543,210」の「,876」、「,543」および「,210」

{ n ,} 前の要素と少なくとも n 回一致します。 "d{2,}" "166", "29", "1930"

{ n , m } 前の要素と少なくとも n 回、m 回以下で一致します。 "19302" in "d{3,5}" "166", "17668", "193024"

*? 前の要素と 0 回以上、ただし可能な限り少ない回数一致します。 d*?.d ".0", "19.9", "219.9"

+? 前の要素と 1 回以上、ただし可能な限り少なく一致します。 "be+?" "been" の "be"、"bent" の "be"

?? 前の要素と 0 回または 1 回、できるだけ少ない回数一致します。 "rai??n" "ran", "rain"

{ n }? 先頭の要素と正確に n 回一致します。 ",d{3}?" "1,043.6" の ",043"、"9,876,543,210" の ",543" および ",210"

{ n ,}? 前の要素と少なくとも n 回一致しますただし、できるだけ少ない回数で。 "d{2,}?" "166"、"29"、"1930"

{ n , m }? 前の要素が一致する回数は n から m の間ですが、回数は少ないですできるだけ。 「193024」の「d{3,5}?」「166」、「17668」、「193」および「024」

後方参照の構築

後方参照により、同じ正規表現内の以前のものを後で識別できます。

次の表は、後方参照構造のリストです。

後方参照構造

説明

パターン

後方参照の数

の一致。 数値の部分式の値と一致します。 (w)1 "seek" の "ee"

k0a29f7fd766f3f67de78a67a2ab23563w)k371aa25074d3a749602b343134e651a8 "ee" in "seek"

代替構造

代替構造は、正規表現を変更して、どちらかまたは両方のマッチングを可能にするために使用されます。

次の表に代替構成を示します:

代替構成

説明

パターン

一致

| 垂直バー (|) 文字で区切られた任意の 1 つの要素と一致します。 th(e|is|at) の「the」と「this」は「今日はその日です。」

(?(expression)yes | no ) 正規表現パターンが式マッチングで指定されている場合は、yes と一致します。それ以外の場合は、オプションの no 部分と一致します。式はゼロ幅アサーションとして解釈されます。 (?(A)Ad{2}b|bd{3}b) 「A10 C103 910」の「A10」と「910」

(?( name )yes | no ) name が名前付きまたは番号付きの場合、yes と一致しますキャプチャ グループに一致がある場合は、オプションの番号と一致します。 (?4ee2b66f1ea5a845417996283e434017")?(?(quoted).+?"|S+s) "Dogs.jpg" 内の "Dogs.jpg "Yiska遊び.jpg"" と "Yiska遊び.jpg"

置換

Replacement は、置換パターンで使用される正規表現です。

次の表は、置換に使用される文字のリストです:

文字

説明

パターン

置換パターン

入力文字列

結果文字列

$number グループ番号で置換 一致した部分文字列。 b(w+)(s)(w+)b $3$2$1 "one two" "two one"

${name} 名前付きグループ名と一致する部分文字列を置き換えます。 b(?w+)(s)(?w+)b ${word2} ${word1} "one two" "two one"

$$ 文字 "$" を置き換えます。 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

Description

Example

(?imnsx-imnsx) パターンの中央大文字と小文字を区別しないなどのオプションを設定または無効にできます。 bA(?i)bw+b は、「ABA Able Act」

(?#comment) インライン コメントの「ABA」および「Able」と一致します。コメントは最初の閉じ括弧で終了します。 bA(?#A で始まる単語と一致)w+b

# [行末まで] X モードのコメント。 コメントはエスケープされていない # で始まり、行の終わりまで続きます。 (?x)bAw+b#A で始まる単語に一致


Regex クラス

Regex クラスは、正規表現を表すために使用されます。

次の表は、Regex クラスで一般的に使用されるいくつかのメソッドをリストしています:

シリアル番号

メソッドと説明

1 public bool IsMatch( string input )
Regex コンストラクターで指定された正規表現が正規表現であるかどうかを示します。指定された入力文字列内で一致が見つかりました。

2 public bool IsMatch(string input, int startat)
Regex コンストラクターで指定された正規表現が、文字列内の指定された開始位置から始まる、指定された入力文字列内で一致を見つけるかどうかを示します。

3 public static bool IsMatch(string input, string pattern)
指定された正規表現が指定された入力文字列内で一致するかどうかを示します。

4 public MatchCollection Matches( string input )
指定された入力文字列内の正規表現に一致するものをすべて検索します。

5 public string Replace(文字列入力, 文字列置換)
指定された入力文字列のうち、正規表現パターンに一致するすべての一致文字列を指定された置換文字列に置換します。

6 public string[] Split( string input )
入力文字列を部分文字列の配列に分割し、Regex コンストラクターで指定された正規表現パターンで定義された位置に従って分割します。

Regex クラスのプロパティの完全なリストについては、Microsoft の C# ドキュメントを参照してください。

例 1

次の例は、「S」で始まる単語と一致します:

using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("The Expression: " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "A Thousand Splendid Suns";

         Console.WriteLine("Matching words that start with 'S': ");
         showMatch(str, @"\bS\S*");
         Console.ReadKey();
      }
   }
}

上記のコードがコンパイルされて実行されると、次の結果が生成されます:

Matching words that start with 'S':
The Expression: \bS\S*
Splendid
Suns

实例 2

下面的实例匹配了以 'm' 开头以 'e' 结尾的单词:

using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("The Expression: " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "make maze and manage to measure it";

         Console.WriteLine("Matching words start with 'm' and ends with 'e':");
         showMatch(str, @"\bm\S*e\b");
         Console.ReadKey();
      }
   }
}

当上面的代码被编译和执行时,它会产生下列结果:

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

 以上就是【c#教程】C# 正则表达式的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。