スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

Step by step 正規表現入門 - ワイルドカード

正規表現に似たものとして、ワイルドカードがあります。
これは *.txt や *.doc といったファイルのフィルターなどでよく使われます。

ワイルドカードは同じような用途に使え、ルールも簡単なので、言語やエディターで正規表現の代わりに使えるものも多いです。
ただ、そこでそのままワイルドカードを使うと、正規表現とルールが違うので次に繋がらなくなります。 ワイルドカード相当ものを正規表現で書けば、 今後正規表現のルールを少しづつ足していくことができます。

正規表現の次のステップとして、ワイルドカードを正規表現であらわすとどうなるかをやってみましょう。

ワイルドカードの特殊文字

ワイルドカードにも方言があって、 特殊文字もいろいろとありますが、 ここではよく使われる次の 2 つということにしておきましょう。
特殊文字 機能
* 任意の文字列
? 任意の 1 文字
マッチ例
*.cpp      → foo.cpp, a.cpp, .cpp
img???.jpg → img001.jpg, img002.jpg, imgbar.jpg

任意の 1 文字

? に相当する正規表現は、任意の 1 文字を表す .(ピリオド)です。
この . のように文字そのものを指さず、特別な意味を持つものを正規表現ではメタ文字 やメタキャラクターと呼びます。

次にワイルドカードの * に対応するものは と行きたいところですが、残念ながら直接対応するものは正規表現にはありません。 その代わりに任意の 1 文字の . と繰り返し回数を組み合わせます。

繰り返し回数

繰り返し回数の指定のメタ文字は次の 3 つです。
メタ文字 機能
* 0 回以上の繰り返し
+ 1 回以上の繰り返し
? 0 回または 1 回
マッチ例
a*bc → abc, aabc, bc
a+bc → abc, aabc (bc はマッチしない)
a?bc → abc, bc
ただし、 Visual Studio の正規表現では ? はありません。

ワイルドカードの * を正規表現で書くと .* となります。

エスケープ

. * + ? は正規表現ではメタ文字となりますがこの文字そのものを指定したいときがあります。この場合 \ を前に付けると文字そのものとなります。 このメタ文字の機能をなくすことをエスケープやクオートと呼びます。
\ の文字自体を指定したい場合は \\ とします。

以上より *.cpp を正規表現になおすと .*\.cpp となります。

行頭、行末

*.cpp は .*\.cpp となると書きましたが、実は完全に同じではありません。
というのも .*\.cpp は foo.cpp にも foo.cppy にもマッチするためです。 これを避けるために正規表現では、先頭と末尾となることを明示的に指定する必要があります。 これには以下の文字を使います。
メタ文字 意味
^ 行頭
$ 行末
*.cpp をちゃんと正規表現になおすと ^.*\.cpp$ となります。

\ と英数字の組み合わせ

メタ文字の前に \ を付けるとエスケープですが、 逆に \ と英数字の組み合わせは特別な意味になります。
この組みわせの正規表現のメタ文字は後で説明することにして、 プログラミングでも一般的に使われるものをまず紹介しておきます。
メタ文字 意味
\t タブ
\n 改行コード (LN)
\r 改行コード (CR)

次は

ヘッダーのインクルード部分を include の文字だけで検索すると余分にヒットしました。 今回の知識を使って絞り込んでみましょう。

ヒットさせたい行は次のような文です。
#include <foo/bar.h>
そのための正規表現は "# で始まり、 include と .h を含む行" とします。
 ^\#.*include.+\.h 
任意文字のルールにより、だいぶん絞り込みが出来るようになりました。
次はこの任意文字をもっと細かく指定する方法に移りましょう。
関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
28位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
4位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

07月 | 2017年08月 | 09月
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。