karakaram-blog

とりあえずこれだけ覚えよう。正規表現の基本

 ツイート 1  シェア 2  Google+1 0  Hatena 3

keyboard-mac

5年くらい前に正規表現について勉強したときのメモが出てきたので残しておきます。とりあえずここに書いてあることを抑えておけば、ある程度の正規表現は書けると思います。

この記事出てくる「基本正規表現」とは grep, sed, Vim などで利用する時の正規表現です。基本正規表現では、通常の「拡張正規表現」と違って、エスケープが必要なメタ文字があります。

目次

  1. 文字クラス
  2. 位置の指定
  3. 文字集合
  4. 量指定子
  5. 後方参照
  6. 最長一致
  7. 練習問題として解いた例題
  8. オススメ書籍
  9. よく見る参考サイト

文字クラス

.
任意の 1 文字。改行を含まない。
\d
数字 1 文字。[0-9]。sed では利用できない。
\D
数字 1 文字以外。[^0-9]。sed では利用できない。
\w
英数字 1 文字。[a-zA-Z0-9]。
\W
英数字 1 文字以外。[^a-zA-Z0-9]。
\s
空白文字 1 文字。スペース、改行、タブ。[\t\n\r\f\v]。sed では利用できない。
\S
空白文字 1 文字以外。[^\t\n\r\f\v]。sed では利用できない。
\t
タブ 1文字。
\n
改行 1文字。

位置の指定

^
先頭。
$
行末。

文字集合

[…]
カッコの間に指定された文字のいずれか 1 文字。[abc] のように指定する。
[^…]
カッコの間に指定された文字のいずれか 1 文字以外。[^abc] のように指定する。
[a-z]
a から z までの文字のいずれか 1 文字。大文字アルファベットは [A-Z]。数字は [0-9]。英数字は [A-Za-z0-9]。ハイフンを含めたい場合は [-a-z] のように先頭に指定する。
(…)
カッコの間に指定された文字列をひとつのグループとして管理する。(abc) のように指定する。基本正規表現では \(\) のようにエスケープする。
(…|…)
前後に指定された文字列のいずれか。(abc|def) のように指定する。基本正規表現では \| のようにエスケープする。

量指定子

*
直前に指定された文字の 0 回以上の繰り返し。
+
直前に指定された文字の 1 回以上の繰り返し。基本正規表現では \+ のようにエスケープ。
?
直前に指定された文字の 0 回または 1 回の繰り返し。基本正規表現では \? のようにエスケープ。
{n}
直前に指定された文字の n 回の繰り返し。基本正規表現では \{\} のようにエスケープ。
{n,}
直前に指定された文字の n 回以上の繰り返し。基本正規表現では \{n,\} のようにエスケープ。
{,m}
直前に指定された文字の m 回以下の繰り返し。基本正規表現では \{,,m\} のようにエスケープ。
{n,m}
直前に指定された文字の n 回以上 m 回以下の繰り返し。基本正規表現では \{n,m\} のようにエスケープ。

後方参照

() で囲まれた文字列を記録しておき、置換する時に \1 で再利用できます。() が複数ある場合は、() の順番に \1, \2 のようにして指定できます。うまく使うとテキスト編集作業が格段に早くなります。マスターしましょう。

最長一致

www.example.com という文字列に対して、.*\. という正規表現を指定すると、www.example. にマッチします。これを www. にマッチさせたい場合は、.*?\. のように指定します。状況に応じて使い分けましょう。

練習問題として解いた例題

例題1

次の文字列をエディタで置換しなさい。

置換前
$array_hoge['piyo_huga'] = array();
$array_hoge['hoge_piyo'] = array();

置換後
$array_hoge['piyo']['huga'] = array();
$array_hoge['hoge']['piyo'] = array();

例題2

文字列をシングルクォートで囲みなさい

置換前
abc123あいう
def456かきく

置換後
'abc123あいう'
'def456かきく'

例題3

空行を除去しなさい

置換前
abc

123
あいう

def

456

置換後
abc
123
あいう
def
456

解答例1

検索
\['([a-z]+)_([a-z]+)'\]

置換
[\1']['\2]

解答例2

検索
^(.+)$

置換
'\1'

解答例3

検索
(\n){2}

置換
\n

オススメ書籍

良書です。一見分厚くて手に取るのをためらいますが、冒頭の 100 ページあたりを読むだけで、正規表現の基本は抑えることができます。あとのページは言語ごとの正規表現の解説なので、必要に応じて読みましょう。

よく見る参考サイト

PHP 開発中によく見る本家マニュアル
PHPの正規表現パターンに利用可能な修飾子

言語ごとに利用できる正規表現がまとまっているサイト
正規表現メモ

 ツイート 1  シェア 2  Google+1 0  Hatena 3