正規表現

正規表現

[reference]

目次

正規表現に関するメモ置き場。

bregexp.dllで使えるものを前提に。

正規表現とは

豪華でちょっと複雑なワイルドカード。

検索とか置換に使う。プログラムとかでよく使うらしいけど、普通の文章とかでもテキストエディタで弄ってるとよく使う。

「正規」と言っても、開発言語やソフトによって細かい仕様が異なり、独自の拡張があったりもする。以下で説明してるのは、多分一番基本的な表現規則。

基本

メタ文字とか呼ばれるものども。それぞれ組み合わせて使える。

抽象的説明

[ ]
括弧内に含まれる一文字に一致
[ - ]
範囲指定した文字に一致
[^ ]
括弧内に含まれる文字以外に一致
^
行頭に一致
$
行末に一致
.
任意の1文字に一致
*
直前のパターンの0回以上の繰り返しに一致
+
直前のパターンの1回以上の繰り返しに一致
?
直前のパターンが無いか、または1回に一致
|
|の前か後に書いたパターンのいずれかに一致
\
特殊な意味を消し文字そのものの意味にする(エスケープ)
( )
( )で囲った正規表現のパターンを記憶する(部分文字列)
\1,\2...*1
記憶した部分文字列を参照する(後方参照)

具体例

[abc]
a,b,cを探し出してくる
[0-3]
0,1,2,3を探し出してくる
[^02-4]
0,2,3,4以外を探し出してくる
^はてな
行頭にある「はてな」だけ探し出してくる(「人力検索はてな」は無視)
グループ$
行末にある「グループ」だけ探し出してくる(「グループ日記」は無視)
.です
「犬です」「猫です」などを探し出してくる
ウリイ*!
「ウリ!」「ウリイ!」「ウリイイ!」「ウリイイイ!」などを探し出してくる
オラァ+!
「オラァ!」「オラァァ!」「オラァァァ!」などを探し出してくる
あいた?
「あいた」か「あいたた」を探し出してくる
無駄|オラ|ドラ
「無駄」か「オラ」か「ドラ」を探し出してくる
\*\[カテゴリ\]
「*[カテゴリ]」を探し出してくる
(波紋の..)
「波紋の呼吸」や「波紋の師匠」などを記憶する
\1だ!
置換などで「波紋の呼吸だ!」や「波紋の師匠だ!」などとして扱われる

やや応用

抽象的説明

( )
括弧内のものをグループ化
*?
0回以上の繰り返しについて最短のものに一致
+?
1回以上の繰り返しについて最短のものに一致
\t
タブ記号
\r
復帰記号
\n
改行記号

具体例

(ボラ)+ーレヴィーア
「ボラーレヴィーア」や「ボラボラーレヴィーア」や「ボラボラボラーレヴィーア」を探し出してくる
<hoge>.*?</hoge>
「<hoge>時間</hoge>を<hoge>支配する</hoge>力」という文字列から、「<hoge>時間</hoge>」と「<hoge>支配する</hoge>」を探し出してくる(?を付けないと「<hoge>時間</hoge>を<hoge>支配する</hoge>」を探し出してくる)
<hoge>.+?</hoge>
同上(繰り返しの数の違い)

タブ記号/復帰記号/改行記号についてはそのままその記号を表す。詳細は省略。

記号の順番

範囲指定(ex.[0-9])は、順番通りに記述しないと狙った文字列にヒットしない。何と何で挟めばどの範囲を指定できるのか知っておく必要がある。数字やアルファベットなら順番は分かるが、記号については順番が分かりにくいので、以下に記号の例をメモしておく。

 !"#$%&'() *+,-./0123
456789:;<=>?@ABCDEFG
HIJKLMNOPQRSTUVWXYZ[
\]^_`abcdefghijklmno
pqrstuvwxyz{|}~
ソ
 
´¨_
±
×÷°
§

全角英数字はこれより後でひらがなより先。分からなくなっても、IMEの「IMEパッド」やATOKの「文字パレット」を見れば、順番が分かる。ちょっと役に立つかもしれない例もメモしておく。

[ぁ-ん]
全てのひらがな
[、-黑]
全ての全角文字


[stub]

いずれ書くかもしれないし書かないかもしれない。


*1:数字の前にあるのはバックスラッシュ。キーボードだと円記号(半角の¥)になってるかも。

* はてなダイアリーキーワード:正規表現