2017-04-02 9 views
0

ユーザの入力中にテキストエディタが正規表現のハイライトを更新する方法を理解できません - テキストの任意の文字を編集することができます - それはすべてのユーザキーを押すたびにすべてのテキストを再スキャンするためのものです。しかし、彼らはそうです。正規表現の実装がテキストエディタで強調表示されます

  • インクリメンタルなPerlベースの正規表現ですか? - 彼らは自然の中にいません
  • 前の試合の後で検索してみませんか? - 前と次のマッチは、ドキュメントの最大部分を再スキャンする必要がある画面から見えないか、あまりにも離れている可能性があります。また、正規表現の正規表現は壊れます。
  • 別のスレッド? -
  • (しかし、我々はまだ遅れを削除し、新たな試合のハイライト/旧ハイライトとの問題を抱えている)唯一の真の解決策のようですが、あなたは迷惑なハイライト遅れ
    • は、ユーザーの入力にてmanualyの強調表示古いマッチを移動することも可能で受け取りますその後、画面バッファ内検索(ほとんどのユーザーの正規表現は、短い文字列を消費)とラグと他の長いマッチを見つけるために強調するためのスレッドを実行する(後半決してより良いショーのハイライト)

かもしれ私がもっと知りたいです実在の実現について

例えば、我々は持っている:5,9 MBのファイル(ABCで終わる、ABCで始まる)と2正規表現:ABC(.|\n)*abcusing(.*?);

  • 崇高テキスト(regex1):スタック領域
  • のうち、正規表現します
  • 崇高テキスト(regex2):〜300ミリ秒遅れ、
  • EditPad Liteの7(regex1)アップ画面それまでは、キーを更新しない: - 5000ミリ秒
  • 最後を削除する場合〜500ミリ秒は、テキスト入力に遅れが 'C' EditPad Lite 7(ABC.*abc - 複数行のドットを使用):遅延はありません!最後に 'c'を取り除くと400ms遅れます。
  • EditPad Lite 7(ABC.*abc、ファイル578,3 Mb):遅延がありません。どうやって??最後の 'c'を50秒差して入力してください。
  • EditPad Lite 7(regex2):遅れはありません!
  • Vim(regex1):maxmempatternを使用している場合、\(.\|\n\)*abc - ファイルがスクロールして終了するとハイライト表示され、遅れは表示されず、300行の17445までスクロールして表示されます。使い方?
  • のVim(regex2):すべてのユーザーエントリにはタイムラグなしバグ

全体のファイルスキャン:

  • .NET正規表現(regex1):削除した場合〜300ミリ秒(テキスト入力に遅れテキストからの最後の 'C' - 永遠フリーズ)
  • .NET正規表現(regex2):〜300ミリ秒
  • の.NETのx86 PCRE不器用な2関数のラッパー(regex1):.NET x86のPCRE不器用なエラー
  • で失敗2関数ラッパー(re gex2):〜300ミリ秒

答えて

0

誰もが興味を持っている場合 - 私はサイズ=画面の文字+株とバッファ(ちょうどビッグマッチをハイライト表示されません)

を使用しました
関連する問題