このブログのはてなブックマーク数 このエントリーをはてなブックマークに追加

知らなきゃ絶対損するPCマル秘ワザ

知らなきゃ損するPC情報を分かりやすくメモする個人ブログ。
『月,水,金』の週3回更新!(予定)

このブログ内をキーワードで検索することもできます。
Loading



最新記事
  • Windows:ミス激減!チェックボックスでファイルを複数選択する (12/05)
  • Amazon:スマホでPC版サイトを開いたらスマホ版に戻れなくなった (12/02)
  • Windows:アプリの音量が勝手に変更される (11/30)
  • かしこいかわいい新PC「エリーチカ」がやってきた(時々ポンコツ) (11/28)
  • Windows:目的毎,ファイルの種類(拡張子)毎に既定アプリを変更 (11/25)
  • 管理人より
    2000万アクセス突破しました。ありがとうございます。

    「正規表現」の勉強のために「メタ文字」をまとめてみた

    このエントリーをはてなブックマークに追加
    イメージ


    こんにちは、さち です。

    「正規表現」って知っていますか?
    簡単に言うと、文などから特定の文字を探し出す仕組みです。
    (厳密には違うが、このような使われ方が多い)

    正規表現は、主にプログラミングで使われますが
    テキストエディタの「検索」「置換」、
    ツイッタークライアントの「ミュートワード」、
    2ちゃんねるブラウザの「NGワード」 などで使える場合もあり
    プログラミングをしない人でも知っていると役立ちます。

    ただ、「正規表現」には記述のルールが色々あって
    イマイチちゃんと把握できていない…。

    ということで、今回は
    「正規表現」の記述方法についてまとめていきます。
    ものすごく備忘録です。




    「メタ文字」を使いこなそう

    「正規表現」には「メタ文字」と呼ばれる特殊な文字があり
    この「メタ文字」を使うことで複雑な文字列を表現します。

    正規表現を使いこなすには「メタ文字」の使いこなしが必須。

    分かりやすい簡単な「メタ文字」を使うだけでも
    そこそこ複雑な文字列を表現できるようになります。

    もちろん、「メタ文字」を今すぐ覚える必要はありません。
    使っているうちに自然と覚えられるので気楽にいきましょう。




    1. 「文字種」を指定するメタ文字

    表

    どの「文字種」が使われているかを指定するメタ文字です。

    上のような表記であらわせる文字数は「1文字」だけ。
    文字数の指定には別途繰り返しを意味するメタ文字が必要です。

    例えば、「.(ドット)」は任意の一文字をあらわします。
    .(ドット)」はよく使うのでこれだけは絶対に覚えておきましょう。

    ちなみに、「-(ハイフン)」を使った表記は
    「文字コードが XXXX から YYYY までの文字」という意味。

    「ひらがな」「カタカナ」のスタートが拗音(小さい文字)である理由は
    その文字種の文字コードが拗音からはじまるためです。
    (「半角カタカナ」の表記も同様の理由)




    2. 「繰り返し」を指定するメタ文字

    表

    文字の「繰り返し」を指定するメタ文字です。

    例えば、数字が0回以上の繰り返すという正規表現は
    [0-9]*」のように記述します。

    *」「+」による繰り返しはよく使います。
    それぞれ「0回以上」「1回以上」という違いがあるので
    上手く使い分けましょう。

    ?」は、例えば「http」と「https」両方を対象にしたい場合
    「s」は有っても無くてもよいものと言えるので
    「https?」のように使います。




    3. 「位置」を指定するメタ文字

    表

    文字列がどの「位置」にあるかを指定するメタ文字です。

    例えば、先頭が「http」からはじまるという正規表現は
    ^http」のように記述します。

    基本は、先頭,末尾 を意味する
    ^」「$」さえ知っていれば大体のことは間に合います。
    ただし、「^」は [ ] 内だと否定の意味になるので注意。
    例えば、^[0-9] は数字からはじまる文字列という意味ですが
    [^0-9] は数字以外の任意の1文字という意味です。

    ちなみに、「\b」の「単語境界」とは単語の先頭や末尾のこと。
    例えば、「e\b」とした場合「cute and clever elichika」で該当するのは
    「cute」の末尾の「e(赤字部分)」だけで、他の「e」は該当しません。
    \be」とした場合は「cute and clever elichika」で該当するのは
    「elichika」の先頭の「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+円");

    なぜ置き換えないと動かないのか…?

    例えば、JavaScript で「alert("こんにちは\nさようなら")」と書いたとき
    文字の「\n」は表示されず「改行」になりますよね。
    JavaScript でも「\」はメタ文字(=特殊な意味を持つ文字)なのです。

    これと同じことが「\d」にも起こります。
    しかし、JavaScript には「\d」という表記は存在しません。
    結果、「\」が削除されて単なる「d」になり、これが正規表現に送られます。
    そのため、正規表現が正常に動かないわけです。
    (同様に、「\\」は「\」に変換されてから正規表現に送られる)

    ちなみに、文字列リテラルを使わない方法で正規表現を書けば
    通常どおりに記述しても大丈夫です。
    (JavaScript では、「/」で囲まれた部分は正規表現リテラルとなる)
    var re = RegExp("\\d+円");
           ↓
    var re = /\d+円/;

    文字列リテラルに正規表現を記述する場合は
    そのプログラミング言語のメタ文字に注意しましょう。




    正規表現については私もまだまだ勉強中です。
    誤りなどがありましたら教えて頂けるとありがたいです。

    今回、紹介したメタ文字については
    比較的簡単で使いやすいものに絞っているので
    物足りない方は別途検索して勉強してみて下さい。








    このエントリーをはてなブックマークに追加




    管理人だけが読めるコメントにする(返信はしません)
    【お知らせ】
    • コメントは承認制です。反映に時間がかかります。
    • Yahoo!BBはスパムコメントが多いため一部規制中です。
    • URLを含む投稿はできません。必要な場合は最初のhを削って下さい。
    • 記事に直接関係ない個人のトラブルにはお答えできません。
    • Android は使ったことがないので質問を頂いても答えられません。
    • その他詳細はこちら





    記事別の週間アクセス数ランキングです。こちらの記事もぜひ読んでみて下さい。

    2008-2016 知らなきゃ絶対損するPCマル秘ワザ  無断転載禁止

    ブログパーツ