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

関連記事

Xamarin Studio から Visual Studio for Mac へ変更してから、”The “XamlCTask” task failed unexpectedly.” が発生。

Visual Studio for Mac がGAしたので、インストールしてみた。 それまで開発して

記事を読む

no image

属性を使って、列挙型の列挙子を並び替え、フィルタリングする

メモだよ

記事を読む

Flowで毎月の定期タスク設定

Flow を使い始めてみた。 Requrrenceで時間をトリガーにすることが出来るがSecond

記事を読む

no image

YomiganaWPFTextBox

こんにちは。 WPFでテキストボックスに入力した内容をカナ変換する方法について今日は掲載します

記事を読む

【iPhoneアプリ】多言語対応させる2

今回はコード内の文字列を多言語化する ファイルを追加する。  

記事を読む

no image

Windows 10 IoT 系の概要、エディション、入手方法などを一度整理

Windows 10 IoT にここ最近振り回されているので、ここまで解釈した内容にて、まとメモ 正

記事を読む

no image

【ストアアプリ】基本的な印刷手順

Windowsストアアプリにて印刷を行う方法を紹介します。 印刷を行うには印刷コントラ

記事を読む

【iPhoneアプリ】自分のiPhoneへインストールする方法

自作のiPhoneアプリを自分のiPhone上で動作させたい場合の手順をメモ ・iOS Dev

記事を読む

no image

【UWP】矢印キーでのフォーカス移動

FocusManagerで上下左右のフォーカス遷移が出来るので、その仕組みを利用してやるビヘイビアを

記事を読む

PHP executable not found. Install PHP 7 and add it to your PATH or set the php.executablePath setting

Visual Studio Code へ PHP IntelliSense 拡張をインストールし

記事を読む

Message

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

PAGE TOP ↑