正規表現を使って検索してみる
正規表現を使うと、柔軟なトリプ検索が楽しめます。「先頭一致で○○getというトリプを集めたい!」「Lv.○○を集めたい!」「数字だけのトリプがホスィ…」「ローマ字読み出来るトリプを!」などなど…。こんな要求に応えてくれるのが、正規表現を用いた検索です。
見知らぬ国のトリッパー(wや、うとりっぱ〜ではこの正規表現を用いた検索が出来ます。相変わらずボーヤがすることなので期待は出来ませんが、参考にしてみてください。また、見知らぬ国のトリッパー(wの正規表現は、正規の正規表現(…分かりにくい…)とは異なるようですので、「トリプ検索に使うためだけ」の参考として覗いてみてくらさいオナガイシマス orz...
正規表現を用いて表記している文字列は、このような形で強調しています。色が見難いYO!とかありましたら、突っ込んでくらさいオナガイシマス。
いつも通り閑散とした掲示板に遊びに来てくださる皆さんに色々チェクしていただきますた…もう禿げ上がるほど感謝!!!
正規表現とわ?
正規表現(regular expression)は、文字列のパターンを表現する表記法で、文字列の検索・置換を行なうときに利用されたりします。テキストエディタの検索や置換のところにも、「正規表現」というものがあったりするかと思います。
「数字が3つ続いた後にgetが出てくる文字列」や、「ABCDEEDCBAというパターンで並んでる文字列」などの文字列を表現できます。詳しいことは…ググッてみてください…。
正規表現は、リテラル (通常の) テキスト文字とメタ文字という2種類の基本文字から構成されます。リレラルテキスト文字とは、普段見慣れてる普通の文字でつ。メタ文字というものが正規表現特有の便利な文字で、^や|などのような、特別の意味を持つものです。
メタ文字について
テキスト操作のための正規表現には「基本正規表現」「拡張正規表現」などなど色々あるようですが、ここではトリプ検索に使用するものについてのみ説明してみます。見知らぬ国のトリッパー(wやうとりっぱ〜同梱のリードミーにも説明がされていますので、それを読んで分かった人はここから下は読む必要梨!
取り敢えずトリプ検索に使用するもののみ、軽く説明してみますです。。。
- a
- 「a」にマッチする正規表現です。メタ文字以外の文字は、「その文字自身を表現する正規表現」です。ちなみに「マッチする」とは、「ある正規表現がある文字列に合致する」という意味だそうです。
- ^:先頭にマッチ
- 位置指定に関するメタ文字でつ。「先頭一致」を意味します。^abcは、abcで始まる文字列にマッチします。◇trip******というトリプが欲しい場合、^tripという正規表現で検索することになります。
- $:末尾にマッチ
- 文字列の一番最後にマッチします。◇******BOYAというトリプを検索する場合、BOYA$と表現します。
- [ ]:文字集合を表現
- [(任意の文字列)]で、[と]に括られたなかの文字のいずれにもマッチします。◇trip******か◇Trip******が欲しい!という場合、^[Tt]ripという形で表現できます。
- [ ]の中では、一定の範囲の文字集合を現すことも出来ます。-を使って、[0-9]とすると、0から9の数字にマッチすることになります。[a-z]とすると、小文字のアルファベットにマッチします。[9-0]や[z-a]という書き方ではダメです。文字コードの小さいほう-大きい方という形式で指定しなくてはいけないとか。トリプ検索に使う数字やアルファベットは、感覚的に「順番に」ということで(・∀・)イイ!!と思います。
- また、[]内の文字集合の先頭で^が使われた場合、[]内の文字集合を否定する意味を持つようになります。[^0-9]と書くと、「数字以外」の文字列にマッチする正規表現、ということになります。
- |:代替を表現
- 小文字のlではなくて、¥のキーをシフトキー押しながら叩くと出てくる|です。並べてみると l| てな感じで違いが分かるかと。|は、両側にある正規表現のどっちか、を表現してくれます。trip|seekerとすると、tripまたはseekerのどちらかを検索してくれます。
- ():グループ化
- (と)で挟まれた正規表現は、一つのグループとして扱われます。数学で出てきた()と同じようなイメージでいいかと。[abc]は、「aかbかc」にマッチする正規表現でしたが、(abc)は、「abc」という文字列にマッチする正規表現です。trip(god|seeker)とかくと、tripgodとtripseekerにマッチします。とても便利な()ですが、9個までしか使えません。
- .:ピリオド
- 任意の一文字、を表すメタ文字です。アルファベットでも数字でも記号でもなんでもマッチします。試しに.....とかで検索すると、そりゃもうエライ勢いでヒットしまくりです。jikgaにもm.skaにもuwh9Jにもauha8にも7gi2Iにも…と、何にでもマッチするので。トリプに出現する記号の1つとして「.」自体を表現したい場合、 \. と書きます。ただし、[ ]の中では「.」だけで使えます。
- \1〜\9:後方参照
- これはどうも上手く説明できないっす…。トリップ検索に関して言えば、前に出てきた()の中身を後ろから参照する、という感じでつ…。\の後ろの数字が、前から何番目の()の中身を参照するのかを意味すると思ってください。
- 正規表現においては、\1〜\9は|を跨いで使えるそうですが、見知らぬ国のトリッパー(wでは|を跨いで使うことは出来ません(-by◆MONOLITHusサソ-)。「papa」と「pan」を検索しようとして^((pa)\2|\2n)なんて書いてみたりすると、エライ勢いで先頭にnがあるものがhitしてきます。
- 具体的に言うと、(.)\1\1\1\1\1と書くと、6連続の文字列にマッチします。(.)(.)\1\2\1\2とかくと、「ABABAB」と2文字を繰り返す文字列にマッチします((..)\1\1でも「ABABAB」と2文字を繰り返す文字列にマッチします-by保守 ◆Hoshu/CYcYサソ-)。ABCDEEDCBAというパターンのトリプを検索したい場合、(.)(.)(.)(.)(.)\5\4\3\2\1と書けば桶でつ。
- *:直前の文字またはグループの0回以上
- *の直前にある文字またはグループの0回以上を表現するメタ文字です。「0回以上」がミソでつ。「.*」と書くと、どんな文字列にも見事にマッチします。そりゃもう、「巫女みこナース!」とか「男爵サソは道具を使う」とか「保守サソは霧番とれない」とかって文字列にも!当然トリプには出てこないでつが…。
- トリプ検索では、例えばOMAEMONAという文字列を「先頭一致でも末尾一致でも検索したい…」という場合、「^.*OMAEMONA」と書いたりして使われるのが一般的です。
- ?:直前の文字またはグループの0回または1回
- 0回または1回、がミソでつ。「2get.」「2get/」「2getter.」「2getter/」を検索したい場合、「^2get(ter)?[./]」と書いたりするです。
- +:直前の文字またはグループの1回以上
- これまた「1回以上」がミソ。「^ero[./]+boya」とすると、ero.boya、ero/boya、ero..boya、ero//boyaなどにマッチします。
以上でトリプ検索に使う正規表現の簡単な説明を取り敢えず終了。
続いて、実際に検索で使ってみませう。