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

関連記事

拡張メソッドは、非ジェネリック静的クラスで定義される必要があります

単純にメッセージどおり。 public static class BaseExtensi

記事を読む

【.NET】16進数文字列から色を設定する

文字列→Colorクラスへの変換メモ プログラム上でFromArgbメソッドに16

記事を読む

【XAML】フォントサイズを自動縮小して全体を表示

Viewboxを親にするだけ。 拡大・縮小方法はStretch, StretchDirec

記事を読む

no image

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

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

記事を読む

no image

RPi3 OmxPlayer / VLC Player 連続再生2回目から映像が乱れる問題

Raspberry Pi 3 Model の Ubuntu や Raspbian で OmxPlay

記事を読む

no image

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

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

記事を読む

VisualStudio2015でiOSアプリケーション開発

こんにちは。 Windows10にアップグレードしました。 VisualStudioも201

記事を読む

【iPhoneアプリ】開発者登録手順(iOS Developer Program) その1

iPhoneアプリの作成からリリースまでの一通りの流れを体験したかったため、 簡単なiPhon

記事を読む

no image

【VB.NET】DataGridViewで行の最大高を設定

DataGridViewにおける行の最大高さを設定するメモ 最大高さに満たない場合は内容を全て表示

記事を読む

NetworkOperatorTetheringManager を使って、モバイルホットスポットをアプリケーションから構成する

UWPアプリケーションからテザリングアクセスポイントの構成を行ったメモ テザリングの Networ

記事を読む

Message

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

PAGE TOP ↑