正規表現を使って検索してみよう!〜見知らぬ国のトリッパー(w編〜
見知らぬ国のトリッパー(wで使えるメタ文字は、
- ^
- $
- []
- ()
- |
- \1〜\9
- .
- *
- ?
- +
以上の10種類です。これを使って複数のトリプを検索してみましょう。
正規表現って何よ?って人は、「正規表現を使って検索してみる」を読んでみてください。
見知らぬ国のトリッパー(wの設定は、「大文字小文字を区別」と「正規表現」にチェックが入っていることを前提に説明します。また、末尾一致の検索をする際には、10文字目には.26AcEgIkMoQsUwYの16文字しか指定出来ないことを頭に入れておいてください。
正規表現は短ければ短いほど検索速度が低下しないようです。知恵を絞って短く書くように頑張ってみませう。ここで自分が書いてるものも絶対ではありません。てか、所詮ボーヤがすることなので、もっと短く出来たりする可能性大です。「こっちの方が効率的だぞ(#゚Д゚)ゴルァ!!」とかありましたら、掲示板などで突っ込んでくらさいオナガイシマス!
取り敢えずどんな感じで使うのさ?
正規表現で検索したいトリプを現す方法はいろいろあります。
まずは見知らぬ国のトリッパー(wの通常検索と同じような使い方から。
通常検索の「先頭」にチェックを入れてboyaを探しているのと同じになるのが、ただ単に
^boyaと書くものです。「先頭一致でboya」がある文字列にマッチします。
末尾一致で探す場合、
BOYA$と書きます。10文字目には.26AcEgIkMoQsUwYの16文字しか出てこないため、
boya$とか書いたら絶対にヒットしません。確率的には奇跡的な10完が出ることがあっても、.26AcEgIkMoQsUwYの16文字以外を10文字目に指定すると絶対にヒットしないのです。.26AcEgIkMoQsUwYの16文字以外の文字を指定していても、特にエラーは出ないので注意汁!
簡単すぎるけど、これが「通常検索」と同じ形の検索方法です。
じゃ、通常検索との違いって何よ?
「通常検索」では、1つのトリプしか検索出来ません。「正規表現検索」の強みは、複数のトリプを同時に検索出来るところにあります。
どーやって複数検索するのよ?
基本的には|と()を駆使します。例えば、先頭一致でkazeboyとkazeboyaを検索したい場合、
^kazeboy|^kazeboya
と書いて検索します。
しかし、()を使えば、上の正規表現は^(kazeboy|kazeboya)と纏めることが出来ます。
お気づきの通り、^kaze(boy|boya)と纏めることも可能。
さらに言えば、この例の場合、^kazeboyという正規表現はkazeboyaという文字列にもマッチするので、kazeboyaはわざわざ書かなくてもいいです。あくまで纏めの例として書いてみますた。
上のように、()と|を駆使すれば複数のトリプを検索していくことが出来ます。
例えば、notanpe、Notanpe、hosyu、Hosyuを検索したい場合、
^(notanpe|Notanpe|hosyu|Hosyu)
と書けば桶です。ですが、
^([Nn]otanpe|[Hh]oshu)
と書いた方がスッキリします。文字列は短い方が(・∀・)イイ!!ようなので、工夫してみてください。
数字だけのトリプを検索したい!
以前常駐スレの方で紹介された書き方です。これが最も短いかと思います。
^[0-9]+$
これの意味は、^先頭から[0-9]0から9までのどれかが+一回以上の繰り返しで$末尾まで一致している、というものです。
^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][26]
と書いても同じですが、短い方が吉です。
^[0-9]+$という正規表現は、正確には「3」や「86」みたいな数字にも「マッチ」します。が、トリッパーでは10文字全てが数字のものしかヒットしてきません。トリプは10桁のものしかないため、結果的に10文字全て数字のものにしかマッチしない(検索でhitしてこない)と勝手に思っています。以下の説明もこんな感じで、「トリッパーでの検索では」という留保付きで読んでくらさい。
ローマ字読み出来るトリプを検索したい!
2文字で読むローマ字読みなら何とか…。例えば、「つ」を「tsu」ではなくて「tu」とするのでよければ、です。
子音として「akstnhfmyrw」、母音として「aiueo」を用意。それぞれのどれか1つが交互に出てくればいいわけです。「どれか1つ」は、「[」と「]」で括ればいいので、
[akstnhfmyrwAKSTNHFMYRW][aiueoAIUEO]これで1文字表現できます(大文字小文字混合になりますが)。てことは、
^[akstnhfmyrwAKSTNHFMYRW][aiueoAIUEO][akstnhfmyrwAKSTNHFMYRW][aiueoAIUEO][akstnhfmyrwAKSTNHFMYRW][aiueoAIUEO][akstnhfmyrwAKSTNHFMYRW][aiueoAIUEO][akstnhfmyrwAKSTNHFMYRW][AIUEo]
とすればいい訳ですが、()を使えば
^([akstnhfmyrwAKSTNHFMYRW][aiueoAIUEO])+$
これで済みます。短くて(・∀・)イイ!!
もちろん、「大文字小文字区別あり」のチェクを外して^([AKSTNHFMYRW][AIUEO])+$としても、大文字小文字混在のローマ字読みトリプが出てきます。
大文字だけでローマ字読みしたいときは大文字だけ、小文字だけなら小文字だけ書けば(・∀・)イイ!!でつ。大文字だけ、または小文字だけ、を同時に検索したいのなら
^(([AKSTNHFMYRW][AIUEO])+$|([akstnhfmyrw][aiueo])+$)
でいいかと。
ローマ字読み情報!
長い長い“春” 【トリップ・シーカー】常駐スレpart72のレス75、いつぞやの875サソからの情報をば。
82 :ひよこ名無しさん[sage]:04/04/10(土) 02:15
そしてまた名無しにヽ(´ー`)ノ
^([kstnhmyrw]?[aiueo])+$
↑子音が無くてもローマ字は成立
さらにいつぞやの875サソより、早口言葉ジェネレーター(wの紹介!
85 :ひよこ名無しさん[sage]:04/04/10(土) 03:26
>>83
オヤスミ!
小ネタ。
^(([BDGHKMNPRSTZ])\2?[AIUEO]|N|WA|[BGHJKMNPR]?Y[AUO]|[CS]H[AIUO])+$
・「っ」や「ん」も出るローマ字表現。
・例 MenMokePPE : #n5KJ8u0t
・使用方法
出る速度で音読する。
名付けて早口言葉ジェネレーター(w
1〜1000get[./]トリプを探したい!
先頭から数字が1つ以上3つ以下続いて、そのあとにget[./]が来る、ということを正規表現で表せばいいのですが…見知らぬ国のトリッパー(wでは「1つ以上3つ以下」という正規表現が使えません。そこで、
^[1-9][0-9]?[0-9]?0?get[./]
とすればいいかと。?は「0回か1回」を表すので、これで1get[./]から1000get[./]までが検索対象になります。
また、
^[0-9]+get[./]
という書き方もあります。これだと0get[./]や10000get[./]も検索対象になりますが、どうしても短くしたい場合などは使うといい鴨。自分の環境では、^[0-9]+get[./]の方が若干速いかなーー・・・・・・?って感じですた。
当然、1桁getが最も出やすいので(文字数短いから)、「もう1桁getはいらないYO!」って場合は、
^[1-9][0-9]+get[./]
にすればいいです。
「数字のあとはgetでもGetでもGETでも(・∀・)イイ!!」って場合は、
^[0-9]+([Gg](et|ET))[./]
と書けば桶です。この場合、gETにもマッチします。そんなの(・A・)イヤダ!!って場合は、
^[0-9]+([Gg]et|GET)[./]
と書けば吉。()は使える数が限られていますし、色々工夫してみてくらさい。
同じように、Lv.のあと数字とか、No.のあと数字とかも表現できます。
1〜1000getter[./]も一緒に探したいんだけど...
1000getter[./]は文字数的にあれですが…。あと、数字3桁getter/も10文字目に/が出ないのであれですが。。。
^[0-9]+[Gg](et|ET)(ter|TER)?[./]
これで探せます。余計なものも出てきますが。。。
kago.aiてトリプが( ゚д゚)ホスィ…
「もう、kago/aiでもKago.aiでもKAGO/AIでもいいからとにかくkagoとaiが入ってて間が区切られてるものが( ゚д゚)ホスィ…けど、7文字はなかなかhitしないから、この際間の区切りはなくてもいいや…一応区切り蟻も検索対象に入れたいけど…。」てな場合の書き方です。
^([Kk]ago|KAGO)[./]?([Aa]i|AI)
「先頭一致にも拘らないからとにかく( ゚д゚)ホスィ…」てなら、
先頭一致を外せば吉。連物が欲しいんだけど?
\使うです。
(.)\1\1\1\1\1
これで6連物を検索します。上のget酉と6連以上の酉を同時に探したい場合、
^([0-9]+([Gg](et|ET))|(.)\4\4\4\4\4)
となります。(.)\4\4\4\4\4は、「先頭から4番目の()の中身」を参照しています。先頭からのカッコの数を数え間違えないようにしてくらさい。
============取り敢えずここまで書いた============