正規表現メモ

Last Updated on 2012年2月22日 by kabekin

■正規表現メモ

正規表現 = 特別な意味を持つ「メタ文字」と「リテラル文字」と「文字クラス=文字集合」を使用して文字列を表現する仕組み。
メタ文字と文字クラス以外は全てリテラル文字(空白も)
? . * ^ $ + – ( ) [ ] { } | a b d D e f n r s S w W
メタ文字はそのままリテラル文字として使えないのでメタ文字をリテラルとして扱うのに○としてメタ文字をエスケープする。(はエスケープ文字)
基本ルール
0回以上の繰返しとは→存在しない又は存在すること → 省略されている可能性がある部分で使用
スペースは普通の文字扱いで特別な意味は無い → スペースと空文字は違う→空文字はNULLとも違う概念的な物
文字列でも各文字の前に空文字が付いているという概念でできている
ex) ‘KABE KIN’という1行があったとすると= 行頭空K空A空B空E空sp空K空I空N行末改行
正規表現で使える文字クラスや制御文字

[0-9] = 数字 = d   [a-z] = 半角小文字  [A-Z] = 半角大文字  [A-Za-z0-9] = 前途の組み合わせも可
[あ-ん] = 環境によって全角もOK → これらは文字コードの順番に依存する
a = ベル($07)
b = 単語の境界空文字又はバックスペース($08)
d = 数字の1文字 → [0-9]相当
D = d以外の文字 → [^0-9]相当
e = エスケープ($1B)
f = 改頁FF($0C)
n = 改行LF($0A)
r = 復帰CR($0D)
s = 半角スペース及び復帰(CR=r),改行(LF=n),改頁(FF=f),水平TAB(HT=t) → [ fnrt]相当
S = s以外 → [^ fnrt]相当
t = 水平タブHT($09)
w = アルファベットや数字、文字 → [0-9a-zA-Z_]相当
W = w以外の文字(記号やスペース、コード等)→ [^0-9a-zA-Z_]相当

メタ文字の使い方(○や△は文字列)
① . (ピリオド) : 任意の1文字→全ての文字が含まれ改行を含まない
② ○* (アスタリスク) : ○が0個以上 → Windowsの*と違い無くてもマッチする.*は単独使用できない
③ ○+ (プラス) : ○が1個以上→その文字がある場合マッチ
④ [○-△](マイナス) :○~△の範囲でマッチ→文字コードに依存するが範囲で指定できる
⑤ ○? (ハテナ) : ○が0個又は1個→その文字があっても無くてもマッチ→省略可能な物を指定したい場合に使える
⑥ ^○ (キャレット) : 行頭が○から始まる
⑦ ○$ (ダラ) : 行末が○で終わる
⑧ ○|△ (パイプ): ○又は△
⑨ [○] : []内の文字をクラス化→○の1文字にマッチ
複数の文字を書くとOR条件になり、[]内にメタ文字を書くとリテラルとして扱われるのでは不要
⑩ [^○] :○以外にマッチ 例:[^0-9] = 数字以外 [^A-Z] = 大文字以外
⑪ ○{n} : ○がn個にマッチ
⑫ ○{n,} : ○がn個以上にマッチ
⑬ ○{n,m} : ○がn個以上m個以下でマッチ
⑭ (○) : ○をグループ化→表現の範囲を明示的に指定したい場合に適用
()で空文字にマッチ
[ ]はブラケット、{}はブレース、()はバーレン
マッチング例
URL http://ameblo.jp/ghs4gj/ や http://blog.ameblo.ghs4gj/ をマッチさせる
簡単には ^http://.+/$ 等
ちゃんとマッチさせるには ^http://[a-z]+.[a-z]+(.|/)[a-z0-9]+/$ 等
フォルダ C:hogehogehogehoge や C:hoge1hoge をマッチさせる
^[a-zA-Z]:(\[a-zA-z0-9″]+)+ 等
文字列 12AX7 をマッチ
^[0-9]{2}[A-Z]+[0-9]{1}  等
12..7 や ^1…7$ 等
文字列 ECL82 をマッチ
^[A-Z]{3}[0-9]{2} 等
ECL82ファミリーをマッチさせる(ECL/XCL/HCL/PCL/YCL/UCL82)
^[EXHPYU][CL]*82$ 等
HD6809又はMC6809又は6809にマッチ
(HD|MC)?6809
前方参照
(条件1) 条件番号 → 条件番号は9個までOK
(6809) 1 としておくと 6809 6809でマッチする
改行のみの行をマッチ(Windows) → ^rn
正規表現について詳しく調べる方はコチラ →正規表現の本

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください