正規表現(Regular Expressions;regex)
正規表現とは何か?
正規表現とは、通常の検索ではできない複雑な状態を検索するためのシステムである。nlFilterで主に使われる。
メタ文字
メタ文字は通常の文字としての扱いを外れ、特殊な扱いを受ける。
. 改行以外の一文字にマッチ
^ 行頭にマッチする
$ 行末にマッチする
| いずれかの文字列にマッチする(イメージとしては論理和;OR)
() グループ化して記憶しておく。Match<では\0,\1\2,\3...で参照して再利用する。Replace<では$0,$1,$2,$3...で参照して再利用する
\ このキャラクタの直後のメタ文字をエスケープし、通常の文字としての扱いを受けるようにする。例えば、"\^"と書くと"^"で検索される。
量指定子
量指定子とは、文字がどれだけ現れるか(量)定義するものである(指定子)。
* 0回以上の繰り返し
+ 一回以上の繰り返し
? 0回または1回の文字の出現
{n} n回あらわれる、例えばa{3}はaaaにマッチするが、aaaaやaaにはマッチしない。
{n,m} n回以上、m回以下の繰り返しのこと
{n,} n回以上の繰り返しのこと
文字クラス
文字クラスとは、[]内になにか表現を書き込むことで、幅のある複数の文字1文字にマッチするようなる。
[abc] aかbかcにマッチする
[a-z] aからzまでの小文字一文字にマッチする
[^abc] aかbかc以外にマッチする
[0-9] 数字一文字にマッチする
[a-zA-Z0-9] 大文字小文字アルファベット数字のどれか一文字にマッチする
[!-~] 半角文字一文字にマッチする(ASCIIキャラクタコードテーブルを参照のこと)
\d [0-9]に同じ
\s 空白文字にマッチ ([ \r\t\n\f\v] と同じ)
\S 空白以外1文字 ([^ \r\t\n\f\v] と同じ)
\n 改行
\t タブ
Unix系の改行 \n
マッキントッシュの改行 \r
Windowsの改行 \r\n
NicoCacheではReplace<内で<CRLF>を使うことでも改行にマッチする
正規表現チェッカを用いることで、正規表現がどんなものか体験できる。またデバッグに便利。
正規表現チェッカーPHP:preg_match()
正規表現チェッカー:::preg_match()
ブラウザから手軽にチェックできる正規表現テストツールまとめ
参考になりそうな例を置いておく
例:URL = www\.nicovideo\.jp/watch/[a-z]{2}[0-9]{1,12}
この例では、.(ドット)の前にエスケープメタ文字(\)を置くことで通常の文字としての扱いを受けるようにしている。また、[a-z]でa,b,c,d,e,f,g.....zまでのアルファベット1文字を文字クラスとして指定し、{2}の量指定子でaからzまでの文字が2文字現れることを指定している。
この場合www.nicovideo.jp/watch/sm123456にマッチするし、
www.nicovideo.jp/watch/nm9999999にもマッチするし、
www.nicovideo.jp/watch/so6584231000にもマッチするが、
www.nicovideo.jp/watch/546985327にはマッチしない。