スポンサーサイト

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

Lazarusで正規表現(8) 第1部完

正規表現のチェック用のアプリをつくるとして、どんな感じにするか悩んでます。
なので、いつものように聞いてみることにしました。

正規表現 テスト サイト
ブラウザで正規表現のチェックなどができるサイトまとめ | IDEA*IDEA:[2012/05/12]
PHP正規表現チェッカー:[2012/05/12]
.Net 正規表現テスト:[2012/05/12]
正規表現てすとぺーじ - Personnel:[2012/05/12]
RegEx Cafe/:JavaScript Regular Expression Tester[2012/05/12]
Javaの正規表現をテストするサイトを作ったよ - 明日の鍵:[2012/05/12]
Java regex tester:[2012/05/12]

今使ってるのはこれ。
正規表現テスター for VBScript:[2012/05/12]

まず、どのタイプの言語かってのがありますけど、今回はLazarusなのでそれは置いといて。
インターフェースは似たような感じです。目的が同じだからそうなるんですけど。
上位10サイトぐらいを開いてみましたが、後の方になると、同じサイトの紹介ページのような感じです。
人気が出ると紹介されて更に人が集まるミーム的な感じです。

さて。

まず作るとして、何が必要かというと、検索語、検索対象、オプション(case-sensitiveとかgreedyかどうかとか)はどう考えてもマスト。それと検索結果。もちろんこれもないのは良くないです。

ただ、置換結果については省略です。普段の自分の使い方を考えてみると、そもそも何かを置換したい時ってあまりない。また、置換したい時はたいてい仕事で使うデータなので、自作のアプリなんかじゃ怖くてやれません。
うまくいくかどうかじゃなくて、誰も使ってないアプリはバグが入ってても絶対きづきませんので。
とすると、置換結果を表示するスペースは別のことに使えます。

それから、正規表現で使えるシンボル(?)の一覧。あると良い感じです。ブラウザだとページが長くても違和感ないんですが、なんとかこじんまりとおさめたいです。

で。

逆に、ないなと思ったのは、正規表現のリアルタイムコンパイルと検索結果のサンプル表示です。
賢い人達にはきっと必要ないんだと思いますけど、

あれとあれにマッチするような正規表現ってこれで良かったかなぁ、こうしてこうして検索ドン。あ。違う。ていうかエラーなの、それともないの。どっちなの。じゃぁこれかな。ここ変えてここも変えてこれかなドン。また違う。もう。

てな感じで、検索ボタンを押すたびに自分の馬鹿さ加減を確認しているようでしんどくなります。

なので、入力中から次々とコンパイルしてエラーをどっかに表示し続けてくれて、検索ドンする前にそもそも正規表現できてないことがわかったり、正規表現できてるけど希望通りの文字列にマッチしてないことがシームレスにわかるときっと幸せになれます。

当然、「.*」なんて入れた日には全部にマッチしそうですけど、入力の邪魔にならないように別のスレッドで検索したりして、重いよこれ使えねぇと思わさない工夫をしたり、グループ化の開き括弧だけを書いたときは、閉じ括弧ありませんぜってやさしくヒントを出してくれたりするそういう優しいのがいいです。

***
正規表現のオプションって英語に直すと何?
正規表現 | Smart -Web Magazine:[2012/05/13]
Class: Regexp (Ruby 1.9.3) :[2012/05/13]
Lazarusのtry...except構文。複数のエラーを受け止められない?
Delphi Basics : Try command:[2012/05/13]
try except without lazarus debugger messing it up:[2012/05/13]
The try...except statement:[2012/05/13]
TMemoの選択解除は、Memo1.SelLength := 0;
エディタは文字列処理が命!:[2012/05/14]

***
そんなこんなで作りました。個人的にはかなり使い良いです。見た目はガチャガチャしてますけど。

・正規表現を1文字変更したら、整合性を確認して、エラーかどうかを表示する
・オプションのスイッチを変更したら、整合性を(略
・検索実験用の文字列を変更したら、整合性(略
・検索実験用の文字列は多すぎると重くなるので2000文字ぐらいでカット(.iniで変更できる)
・正規表現に問題がなければ検索実験用の文字列を検索して結果を表示する
・変な正規表現を渡すとたまに止まる
・終了時点の内容を次回も再現する
・強制終了した時は忘れてる
・右端にちょっとしたサンプルをつけてるけど見えない
・その代わりにリストを選択するとステータスバーに出す
・「KTKR!!」をクリックすると、それなりに記録する

ということができます。

感じとしては、インターネットエクスプローラで表示中のページの検索をする時に、入力に対してリアルタイムにページ内の文字列を選択状態にしてくれるアレを、正規表現付きでやったものです。

雰囲気だけですけど、正しくない正規表現の時は、こうで


最後の1文字を入力して正規表現を完成させると、こうなる


***
よっぽど変な正規表現を入れなければ、ほぼ一瞬です。なので、スレッドがどうとかは一切なし。普通にOnChangeでCompileとExecを実行してます。

ちなみに、2Chのニュースのページのソースを貼り付けて、Descriptionだけを抜き出すための正規表現を書いたつもりです。$1は文字列の閉じ記号を開き記号に合わせるために、後方参照用の捨て検索です。
欲しいのは、$2に入ります。Lazarus的には、Match[2]です。

それと、文字列の後は、UTF8的なバイト位置とバイト長さを出してます。

***
そういえば、空文字列がマッチしまくるような正規表現を書いた時に、上段のTMemoに死ぬほど結果が表示されて鬱陶しいのを回避するために、20件ぐらいの結果を表示したら打ち切りしてます。
.iniとかで上限件数を変更できるようにしようとして、しそこねました。

***
てっぺんの入力欄の下に、エラーかどうかを出してます。ホントは、クリックしたらエラーの位置にジャンプするのを考えていたけど、何回か使ってみたところ、イランな、と思ったので省略です。

あと気になるのは、FileExistsとかLoadFromFileとかParamStrとかを使っているんですが、FileExistsUTF8を使わないと何かが起きるのかどうかです。
ひょっとすると日本語を含むパスで試すと変なところにファイルが保存される罠が発動するかも。
大丈夫でした。なんだろUTF8版って。

ソースコードと.exeです。UPXで圧縮してます。
あと、終了時に起動した場所に幾つかのファイルをぶちまけます。フォルダに隔離してから起動しないと、デスクトップに散らばります。
20120515_Lazagna.zip 674 KB (690,443 バイト)

第1部完です。Replaceとかややこしい系のヘルプ訳してないですけど、今度使うときに続きをします。

***2012/5/16追記
egexPal0.1.4— a JavaScript regular expression tester:[2012/05/16]
モロなサイトがありました。まぁこういうことなんですけど、いいんです。
Lazarusの勉強がメインなので、と書いておきます。
関連記事
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。