アーカイブ

タグ: ‘表現’ の記事
1813 letters | 2091 views | コメントする

 自分で正規表現クラスを作るのは無理だと言い切っちゃうくらいだから、そもそも正規表現に対する理解もあまりしてなくて、結局誰かの作った物を利用するしかない。従来のx86版真魚では鬼車のDLLを使っていたが、これも2010年で更新が止まっているっぽい。そして、鬼車の改変版として鬼雲ってのをよそで出してて、ただしmakefileはwin32しかついてこないみたい。  bregonig.dllって言うのが出てて、昔から多くのテキストエディタで利…続きを読む

さて、久しぶりにお題が出ている。 今回は正規表現が絡むので、メモ帳での動作確認は出来ないが、 幸いにも秀丸とEmEditor Freeが同じ動作をしたので、これを正解と思って良いだろう。 何をやるのかというと、正規表現で行頭を表す^(ヘの字記号)の扱いだ。 本題は置換なのだが、内部では検索して引っ掛かった部分を置き換えてるわけだから、 置換だけじゃなくて検索の動作も見てみた。 この時点で既に秀丸とEmEditorは同じ動作なわけだから納…続きを読む

関連本を読んで強く感じたんだけどさ、正規表現に正規の物なんてないね。 でも、こう書いたらこう動いて欲しいってのの標準みたいなのはあるな。 で、今使ってるTRegExprは、検索に関してはそういう標準は十分満たしてる感じ。 置換は¥1~¥9で$1~$9と同じ動作をするように変更すれば十分って感じ。 十分どころか、真魚のくせにっていうくらいたいそうなことが出来る。 今できない機能に今後対応するかどうかについては、 面倒くさいからやりたくない…続きを読む

落ちる話からは離れて、いったい今実装している正規表現の何が不満かという話。 あたしゃ正規表現自体普段使わないし詳しくないので、一口に正規表現と言っているが、 実際はどんな書き方が通るのかが、物によってもバージョンによっても違うらしい。 今使ってるTRegExprが、一般に正規表現と言われるものに比べて、 十分な実装がされているのかされていないのか、その判断すら難しいほど無知なんだが、 ウチにある正規表現について書かれた本を見ると、ここが…続きを読む

さて、8000文字テストで落ちないエディタを三つあげたわけだが、 その三つとも、80000文字テストを乗り切ることは出来なかった。 EmEditorの限界は74483文字で、それ以上だと「見つかりませんでした」が出るか、 条件は不明だが「Too Big」とかなんとかっていうダイアログが出るかする。 落ちるよりはヒットしない方が全然マシ。 萌ディタは、80000文字の貼り付けが出来なかくて「がっかり」ダイアログ。 仕方ないので8000文字…続きを読む

最初は、ヘルプに遅いと書いてあるから速くできるんじゃないかとか、 まだ対応してない物を自前で対応できないかとか、 そういうつもりで正規表現ライブラリの中身を検証していたはずだったが、 途中からはアプリが落ちるか落ちないかの話題に変ってしまったな。 で、一応解決したよ。現在は、8000どころか80000文字でも落ちないようになった。 もちろん、32bitを超える数字のケアはしてないので、そこであふれるだろうが。 32bit以上のケアしない…続きを読む

アプリが落ちる話なので、言いがかりだと言われないように、やり方を明確にしておく。 -(半角のマイナス)を8000文字入力する。コピペでも良い。 なぜ8000かというと、欠陥のあるライブラリでも数百ぐらいだとまだ耐えるからだ。 マイナスには特に意味はないが、改行が含まれると検索出来ない物もあるのでダメ。 で、8000文字入力したら先頭1文字目に入力位置をあわせ、 正規表現で(.|¥n)+を検索する。あえて全角で書いたがもちろん半角で。 す…続きを読む

難しい言葉で言うと再帰。 正規表現の検索では、普通の検索と違ってたくさんの枝分かれが起こる。 その分かれた枝からさらに別の枝分かれが起こる。 全部の枝を検証して最長一致を求めるっていう事をやらせるために、 TRegExprは再帰っていう方法を使っている。 マッチしているかどうかを判断すべきメソッドは、枝分かれ前の現在の枝しか評価せず、 枝分かれの分岐点からは、それぞれの枝について自分と同じ仕事をするメソッドに託す。 それれぞれの枝がさら…続きを読む

ショック。 やっぱり自分で使うライブラリは、ソースコード全部把握してから使わなきゃダメね。 正規表現では+や*とかを使って、ものすごく長い範囲にヒットさせる事が出来るわけだが、 TRegExpで、ものすごく長い文字列にヒットさせようとすると、 オーバーフローが起こって何の警告も出さずにアプリが落ちる事がわかった。 たぶんさ、足し算とか引き算とかで桁があふれた場合は警告出るんだろうね。 今回のオーバーフローは、正規表現ライブラリ内のとある…続きを読む

出来れば自分で書きたくないので、利用できる物を探してみるのだが、 Delphiであると言うことがどうしても足かせになる。 .NETの正規表現が逆方向も検索できて大変よろしいのだがな。 ともかく、Delphiってのはユニコードがない時代に作られたものなので、 Delphi向けの正規表現といえばSJISしか検索できないとか日本語ダメとかで、 逆にユニコードの検索が出来るとDelphiから利用できなかったりで、 Delphiかつユニコードな正…続きを読む

ずっと仕様だからしょうがないとか思ってあきらめてた部分は多々あるわけだが、 その仕様だからってのは、仕様じゃなくすることは出来るけど面倒すぎるって事ばかり。 で、たまたまやる気が持続したので、仕様を打破する更新とか続いたわけだ。 もうさ、不満があったら面倒でも修正しちゃうって流れに完全にシフトしちゃったんだけど、 知識不足でどうしても手が出せないのが正規表現部分。 真魚は作者と嫁が使うために作られた物であり、 作者も嫁もよくわかっていな…続きを読む