はじめに

※ このエントリは、以前このブログで公開していたエントリに加筆・修正を加えたものです。

いまだに正規表現をうまく使いこなせないので、自分なりにまとめてみました。

このエントリを書くにあたり、正規表現の機能の覚書きを参考にさせて頂いています。(というかそのサイトで勉強した)正確で詳しい内容は、そちらを参照してください。

文字の代わりになるもの

正規表現の機能を「文字の代わりになるもの」と「機能を付加するもの」の2つに分類して考えました。 前者は、「.」(任意の1文字)「\t」(タブ文字)のようなものを指し、後者は「*」(直前の文字を0回以上繰り返す)などを指しています。

任意の1文字

メタ文字 内容
. 任意の1文字

任意の文字が複数続く場合は、「.*」と表記します。

文字セット

メタ文字 内容
[abc] a,b,cのいずれか1文字
[a-z] a,b,c...zのいずれか1文字
[0-9] 0,1,2,3,4,5,6,7,8,9のいずれか1文字
[A-Za-z0-9] 半角英数字のいずれか1文字(英字は大文字小文字のどちらもOK)
[^0-9] 半角数字以外の1文字

エスケープシーケンス

メタ文字 内容
\d 数字
\D 数字以外
\s タブ、スペース、改行
\S タブ、スペース、改行以外
\w [a-zA-Z0-9_]と同義
\W [^a-zA-Z0-9_]と同義
\r CR
\n LF

機能を付加するもの

続いては繰り返しや後方参照、先読みなどについてです。

繰り返し

表記 内容
? 直前の文字が0回、または1回(欲張り)
?? 直前の文字が0回、または1回(非欲張り)
* 直前の文字を0回以上繰り返す(欲張り)
*? 直前の文字を0回以上繰り返す(非欲張り)
+ 直前の文字を1回以上繰り返す(欲張り)
+? 直前の文字を1回以上繰り返す(非欲張り)
{n} 直前の文字をn回繰り返す
{n,} 直前の文字をn回以上繰り返す
{n,m} 直前の文字をn回からm回繰り返す

欲張りと非欲張りについて。

対象文字列 検索文字列 結果
aaaabbbbcccc a+(欲張り) aaaabbbbcccc
aaaabbbbcccc a+?(非欲張り) aaaabbbbcccc

選択

表記 内容
(A|B) AまたはB

「|」(パイプ)は上の表ではMarkdown記法の都合で全角になっていますが、半角です。

行頭、末尾、単語境界

表記 内容
^ 行頭
$ 末尾
\b 単語境界
\B 単語境界以外

検索や置換でよく使います。

後方参照

対象文字列 検索文字列 置換文字列 結果
ABCDEF (CD) \1XYZ ABCD*XYZ*EF

先読み

対象文字列 検索文字列 結果
ABCDEFGABCDEF DEF(?=G) ABC*DEF*GABCDEF

さいごに

これらを組み合わせて検索や置換を行えれば、効果的に処理が行えるのではないでしょうか。