知らなきゃ絶対損するPCマル秘ワザ
『月,水,金』の週3回更新!(予定)
こんにちは、さち です。
「正規表現」って知っていますか?
簡単に言うと、文などから特定の文字を探し出す仕組みです。
(厳密には違うが、このような使われ方が多い)
正規表現は、主にプログラミングで使われますが
テキストエディタの「検索」「置換」、
ツイッタークライアントの「ミュートワード」、
2ちゃんねるブラウザの「NGワード」 などで使える場合もあり
普通の人でも知っていると意外と役立ちます。
ただ、「正規表現」には色々な記述ルールがあって
イマイチちゃんと把握できていない…。
ということで、今回は
「正規表現」の記述方法についてまとめていきます。
ものすごく備忘録です。
「メタ文字」を使いこなそう
「正規表現」には「メタ文字」と呼ばれる特殊な文字がありこの「メタ文字」を使うことで複雑な文字列を表現します。
正規表現を使いこなすには「メタ文字」の使いこなしが必須!
分かりやすい簡単な「メタ文字」を使うだけでも
そこそこ複雑な文字列を表現できるようになります。
もちろん、「メタ文字」を今すぐ覚える必要はありません。
使っているうちに自然と覚えられるので気楽にいきましょう!
1. 「文字種」を指定するメタ文字
どの「文字種」が使われているかを指定するメタ文字です。
上のような表記であらわせる文字数は「1文字」だけ。
文字数の指定には別途繰り返しを意味するメタ文字が必要です。
例えば、「.(ドット)」は任意の一文字をあらわします。
「.(ドット)」はよく使うのでこれだけは絶対に覚えておきましょう。
ちなみに、「-(ハイフン)」を使った表記は
「文字コードが XXXX から YYYY までの文字」という意味。
「ひらがな」「カタカナ」のスタートが拗音(小さい文字)である理由は
その文字種の文字コードが拗音からはじまるためです。
(「半角カタカナ」の表記も同様の理由)
2. 「繰り返し」を指定するメタ文字
文字の「繰り返し」を指定するメタ文字です。
例えば、数字が0回以上の繰り返すという正規表現は
「[0-9]*」のように記述します。
「*」「+」による繰り返しはよく使います。
それぞれ「0回以上」「1回以上」という違いがあるので
上手く使い分けましょう。
「?」は、例えば「http」と「https」両方を対象にしたい場合
「s」は有っても無くてもよいものと言えるので
「https?」のように使います。
3. 「位置」を指定するメタ文字
文字列がどの「位置」にあるかを指定するメタ文字です。
例えば、先頭が「http」からはじまるという正規表現は
「^http」のように記述します。
基本は、先頭,末尾 を意味する
「^」「$」さえ知っていれば大体のことは間に合います。
ただし、「^」は「[ ] 」内だと否定の意味になるので注意。
ちなみに、「\b」の「単語境界」とは単語の先頭,末尾のこと。
例えば、正規表現で「e\b」とした場合
「cute and clever elichika」で該当するのは
「cute」の末尾の「e(赤字部分)」だけで、他の「e」は該当しません。
4. 「選択」をあらわすメタ文字
「AまたはB」ような「選択」をあらわすメタ文字です。
例えば、正規表現で「No(zomi|ntan)」と書いた場合
「No」の続きは「zomi」と「ntan」から選択することになり
「Nozomi」と「Nontan」という2つの文字列をあらわします。
普通なら2つの文字列を別々に書く必要があるものを
一つの正規表現であらわせるわけです。
ちなみに、「選択」は複数使用できるので
「No(zomi|ntan|nnon)」のようにさらに追加できます。
5. エスケープ文字
「.(ドット)」をはじめとした「メタ文字」で特殊な意味を持つ文字は
そのままでは「普通の文字」として使うことができません。
例えば、正規表現で「www.lovelive.jp」という文字列を作るには
「www\.lovelive\.jp」のように
「.(ドット)」の前に「\」を書く必要があります。
このような方法を「エスケープ」と言います。
また、「\」自体もエスケープを意味する特殊な文字なので
普通の文字として「\」を使うには「\\」と書く必要があります。
ちなみに、「\」はフォントによって表示が異なる文字です。
海外のフォントでは、半角の「\(バックスラッシュ)」
日本語のフォントでは、半角の「¥(円記号)」で表示されます。
6. その他のメタ文字
特殊な意味を持つメタ文字です。
「改行」「タブ」「空白」を意味する
「\n」「\t」「\s」を知っていれば大体は何とかなります。
(アルファベットを大文字にすると「否定(Aでない)」の意味になる)
「\d」「\l」「\u」「\w」などは記述を省力化できて便利ですが
文字種の指定でも間に合うので無理に覚えなくてもいいです。
「\」が付くメタ文字が機能しない場合
例えば、JavaScript の「文字列リテラル」の部分つまり「"」や「'」で囲まれた文字列を記入する部分では
正規表現の「\n」「\d」「\\」などが正常に機能しません。
そのような場合、「\」を「\\」に置き換えてみて下さい。
「\n」→「\\n」,「\d」→「\\d」,「\\」→「\\\\」といった感じです。
これで正常に機能するようになると思います。
var re = RegExp("\d+円");
↓
var re = RegExp("\\d+円");
↓
var re = RegExp("\\d+円");
ちなみに、動かない原因は
JavaScript においても「\」がエスケープを意味する文字だからです。
例えば、文字列リテラルに書いた「\d」は
JavaScript によりエスケープ文字として扱われます。
しかし、JavaScript には「\d」という表記は存在しないので
「\」が削除され、単なる「d」に変換されます。
結果、「d」が正規表現に送られるため正常に機能しないわけです。
(同様に、「\\」は「\」に変換されてから正規表現に送られる)
ちなみに、次のように文字列リテラルを使わない方法で記述をすれば
通常どおりに記述をしても機能します。
var re = /\d+円/;
文字列リテラルに正規表現を記述する場合は
そのプログラミング言語によるエスケープに注意しましょう。
正規表現については私もまだまだ勉強中です。
誤りなどがありましたら教えて頂けるとありがたいです。
今回、紹介したメタ文字については
比較的簡単で使いやすいものに絞っているので
物足りない方は別途検索して勉強してみて下さい。
| ホーム |
記事別の週間アクセス数ランキングです。こちらの記事もぜひ読んでみて下さい。