正規表現講座 .Net Framework版

はじめに

正規表現は、実装言語により若干の差異があります。
本稿では、.Net FrameworkのSystem.Text.RegularExpression.Regexの正規表現を対象とします。
他の正規表現の場合、使えるもの・使えないものに微妙な差があります。
例題では、Powershellを使う想定です。

わかりやすさのために、一部不正確な表現になっているところはご容赦願います。

正規表現の基本

正規表現とは、文字列を照合するための表現です。
固定の文字列であるかを判定する場合、==等の言語固有の演算子で判定が可能ですが、「abc」「abd」のいずれかの判定となると、OR等を使用して複数条件を書くことになります。

条件が二個であればORでつないでも良いですが、もっと多い、例えば「abで始まる3文字以上を含む文字列か?」といった条件となると、面倒です。

これを解消するのが、正規表現となります。

まずは、やってみましょう。

Windows付属のPowershellでは、「-match」演算子で簡単に正規表現による一致が確認できます。
Powershellを起動し、以下の一行目のように「’abc’ -match ‘ab.’」と入力すると

> ‘abc’ -match ‘ab.’True

「True」とかえってきます。
これは、「abc」という文字列は正規表現「ab.」にマッチするか?という評価で、「True」すなわちマッチする、ということを表します。

基本パターン

リテラル

文字そのものです。
大雑把に言えば、半角記号以外の文字と考えてください。
例えば、正規表現の「a」は「a」という文字にマッチしますが「b」にはマッチしません。

> ‘a’ -match ‘a’True
> ‘b’ -match ‘a’
False

 

任意の一文字

「.」(ピリオド)は、LF(ASCIIコード10、Windowsの改行CRLFの後半)を除く一文字にマッチします。
たいていの文字にマッチする記号として覚えてください。

> ‘a’ -match ‘.’True
> ‘b’ -match ‘.’
True
> “n" -match '.'
False

Powershellの場合、LFは「"n”」とすることで表現できます。

LF

「\n」は、LF(ASCIIコード10、Windowsの改行CRLFの後半)にマッチします。

> “`n” -match ‘\n’True
> ‘a’ -match ‘\n’
False

正規表現のリテラル表記としては、LFを「\n」として表現します。

文字グループ

「[abc]」は、「a」「b」「c」のいずれかにマッチします。

> ‘b’ -match ‘[abc]’True
> ‘d’ -match ‘[abc]’
False

また、「[a-z]」が「a」~「z」にマッチするように、範囲指定も可能です。

> ‘b’ -match ‘[b-x]’True
> ‘a’ -match ‘[b-x]’
False

 

グループ化

「(abc|wxyz)」は、「abc」か「wxyz」にマッチします。括弧を使うとパターンをグループ化することができます。

> ‘abc’ -match ‘(abc|wxyz)’True
> ‘abw’ -match ‘(abc|wxyz)’
False

 

量指定

「a*」は、任意個の「a」にマッチします。「a」「aa」「aaa」…、加えて長さ0の文字列にもマッチします。
「*」は任意個の直前のパターンにマッチする正規表現です。

> ‘a’ -match ‘a*’True
> ‘aa’ -match ‘a*’
True
> ” -match ‘a*’
True

「a?」は、0または1個の「a」にマッチします。「a」と長さ0の文字列にマッチします。
「?」は0または1個の直前のパターンにマッチする正規表現です。

> ‘a’ -match ‘a?’True
> ” -match ‘a?’
True

 

アンカー

「^」は、先頭にマッチします。「^a」で「a」から始まる文字列にマッチします。

> ‘a’ -match ‘^a’True
> ‘ba’ -match ‘^a’
False
> ‘ba’ -match ‘a’
True

「$」は、末尾にマッチします。「a$」で「a」で終わる文字列にマッチします。

> ‘a’ -match ‘a$’True
> ‘ab’ -match ‘a$’
False
> ‘b’ -match ‘a$’
False

 

例題

・「WindowsXP」「WindowsVista」「Windows7」「Windows8」にマッチして「Windows9」にマッチしない正規表現は?
・偶数にマッチし奇数にマッチしない正規表現は?(マッチ対象は1つの数値とします。例「12345」「23456」等)

つづく・・・

正規表現講座 .Net Framework版” に対して1件のコメントがあります。

コメントは受け付けていません。