【.NET】正規表現の復習

公開日: : 最終更新日:2015/10/20 Blog, Microsoft , ,

正規表現エンジン

System.Text.RegularExpressions.Regexオブジェクトを使用する。

よく使うメソッド

IsMatch 特定の正規表現パターンが出現するかどうかを調べる
Match, Matches 正規表現パターンと一致したテキストを 1 つまたは全部取得する。Result.Valueが取得文字列
Replace 正規表現パターンと一致したテキストを置換する

正規表現 言語おさらい

文字クラス

リテラル gr “gr”が対象。
肯定 [ae] a, e が対象。既定では大文字/小文字を区別。
否定 [^aei] a, e, i 以外が対象。
範囲 [A-Z] A~Zが対象。範囲はUnicodeで区別。^で範囲否定
任意 a.c “a” + 任意の一文字 + “c” が対象。ワイルドカード(\n)は除く。
カテゴリ \p{name} カテゴリの省略形または名前付きブロックが対象
※Unicodeでは各文字にカテゴリが割り当てられている。
カテゴリ
否定
\P{name} 上記の否定型
\w 単語に使用される任意の文字と一致
\W 単語に使用される文字以外の任意の文字と一致
\s 空白文字と一致
\S 空白以外の文字と一致
\d 10進数字と一致
\D 10進数以外の任意の文字と一致

 

文字エスケープ

特殊文字で使用

\a ビープ音文字
\b バックスペース
\t タブ
\r キャリッジリターン
\v 垂直タブ
\f フォームフィード
\n 改行文字
\e エスケープ文字
\nnn 8進数表現で文字を指定(nnn)
\xnn 16進数表現で文字を指定(nn)
\cX ASCII制御文字(X)と一致
\unnnn 16進数形式で表すUnicodem文字(nnnn)

 

アンカー

検索位置を指定する際に使用

^ 文字列、行の先頭
$ 文字列の末尾、行または文字列末尾の\nの前
\A 文字列の先頭
\Z 文字列の末尾、文字列末尾の\nの前
\z 文字列の末尾
\G 前回の一致が終了した位置
\b \w(英数字)と\W(英数字以外)文字の境界位置
\B \b以外

 

グループ化構成体

部分文字列をキャプチャし前方参照構成体と併せて使用

(subexpression) 一致した部分式をキャプチャ、1から始まる序数を代入
(?<name>subexpression) 一致した部分式を名前付きグループにキャプチャ。<>は”でも良い。
(?<name1-name2>subexpression) グループ定義の均等化を定義。
【グループ定義の均等化】
既に定義されていたname2の定義を削除し、name2とname1の間隔をname1に格納。
(?:subexpression) 非キャプチャグループを定義
(?imnsx-imnsx:subexpression) 指定したオプション(imnsx-imnsx)を適用するか無効にする
(?=subexpression) ゼロ幅の肯定先読みアサーション
(?!subexpression) ゼロ幅の否定先読みアサーション
(?<=subexpression) ゼロ幅の正の後読みアサーション
(?<!subexpression) ゼロ幅の負の後読みアサーション
(?>subexpression) 非バックトラッキング(“最長”)

 

オプション

正規表現解釈方法の制御に使用

i 大文字と小文字を区別しない
m 複数行を使用
n 名前のないグループをキャプチャしない
s 単一行モードを使用する
x エスケープされていない空白を無視

前方参照構成体

一致した部分式を同一正規表現内で使用

\number 番号付き前方参照
\k<name> 名前付き前方参照

 

量指定子

直前の要素数を指定する際に使用

* 直前の要素と0回以上一致
+ 直前の要素と1回以上一致
? 直前の要素と0回または1回一致
{n} 直前の要素とn回一致
{n, } 直前の要素とn回以上一致
{n, m} 直前の要素とn回以上m回以下で一致
*? 直前の要素と0回以上
+? 直前の要素と1回以上一致
?? 直前の要素と0回または1回一致
{n}? 直前の要素とn回一致
{n, }? 直前の要素とn回以上一致
{n, m}? 直前の要素とn回以上m回以下で一致

 

代替構成体

OR一致を行う時に使用

| th(e|is|at) => the, this, that
(?(A) yes | no ) Aに一致する場合はyes,一致しない場合はnoで検証
(?(name) yes | no ) 番号付きキャプチャに一致する場合はyes,一致しない場合はnoで検証

 

置換

Regex.Replaceメソッドで置換を行う際に使用

$number numberグループと一致した部分文字列
${name} nameグループと一致した部分文字列
$$ “$”リテラル
$& 一致したパターン全体と同じパターン
$` 一致した場所より前にある入力文字列の全て
$’ 一致した場所より後にある入力文字列の全て
$+ キャプチャされた最後のグループ
$_ 入力文字列全体

関連記事

ストアアプリ、UWPアプリをデスクトップアプリケーションから起動する

SendKeyなどを使って無理やり検索ウインドウへ指定した、起動方法しか知らなかったのでメモ(とんで

記事を読む

画面設計デザイン時の無料画面イメージ作成ツール

画面デザイン全般に使っているツールを紹介。 Webアプリ作成時のワイヤーフレームや、 ス

記事を読む

no image

FixedDocumentの印刷およびXPS形式での保存

こんにちは。 以前、XAMLファイルを帳票テンプレートとして動的ロードする記事を掲載しました。

記事を読む

Docker for Windows で ドライブ共有が出来ない

Shared Drives タブで Cドライブにチェックをして Apply を押す。 認証ダイ

記事を読む

【ストアアプリ】トースト通知の基本

Windowsストアアプリ開発での基本。 トースト通知について投稿します。 Pack

記事を読む

no image

【WPF/XAML】Buttonのテキスト(Content)を自動改行/折り返しさせる

今更WPFを触りはじめました。 それまではほぼ.NETは2.0止まりというオワコン開発者です。

記事を読む

Visual Studio Team Services で 新規プロジェクトを作成するときの自分用初期設定メモ

新規プロジェクト作成 Version control -> Git Work item proc

記事を読む

[OxyPlot]errro CS0117: ‘Resource.Attribute’ に ‘mediaRouteSettingsDrawable’ の定義がありません

Xamarin.Formsでグラフ描画を行う方法のひとつにOxyPlotというライブラリがある。

記事を読む

UWPをHockeyApp対応させる

走り書きメモ。 UWPをHockeyApp対応させるためにはNuGetパッケージを使ってモジュール

記事を読む

Xcode標準テンプレート

Xcodeで新規Projectを作成した時にテンプレートを選ぶことが出来る。 「Choose a

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑