【.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グループと一致した部分文字列
$$ “$”リテラル
$& 一致したパターン全体と同じパターン
$` 一致した場所より前にある入力文字列の全て
$’ 一致した場所より後にある入力文字列の全て
$+ キャプチャされた最後のグループ
$_ 入力文字列全体

関連記事

no image

Microsoft.OData.Clientでフォーム認証を行う

構成 サーバー ** Azure API Apps ** ASP.NET Web API クライ

記事を読む

no image

Desktop App Converter で作成したUWPアプリケーションをストアで公開したい

Twitterで掲題について調べている人がいらっしゃって、一緒に調べてみたのだが 案内されているペー

記事を読む

no image

【C#, WPF】XMLデータをListViewに表示し、チェック項目のみXML保存させる

前回の続きというか、WPF版。 <Window x:Class="MyWP

記事を読む

no image

Azure へ WordPress 環境を作成

よくあるやつだけど。 社内LT用

記事を読む

Package ‘Win10SDK_10.0.14393.33,version=10.0.14393.3300’ failed to install.

Visual Studio 2017 RC1 でUWPアプリケーションのコンポーネントインストールす

記事を読む

App Service Linux (Docker) 環境で、コンテナ内の Nginx のログをAzureポータルから確認

何も設定しない場合はSSHでアクセスしてログ参照する 通常はコンテナ内の /var/log/ngi

記事を読む

no image

Xamarin.Android フルスクリーン

自分用メモです。

記事を読む

no image

Expression Encoder を組み込んだアプリケーションを配布する際のライセンス問題

Windowsアプリケーションにメディア編集機能を実装したい場合に、Expression Encod

記事を読む

no image

【TFS2013】Visual Studio 2005 Professional から TFS2013へ接続

こんにちは。 私の周りではいまだにレガシーな開発環境を使いつづけているプロジェクトが多いです。

記事を読む

no image

Xamarin.FormsのAndroidでスプラッシュ画面

Xamarin.Formsでアプリを作成した時、iOSは起動時にLauncher.storyboar

記事を読む

Message

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

PAGE TOP ↑