2017-04-02 70 views
0

我無法理解文本編輯器如何在用戶鍵入時更新正則表達式的突出顯示 - 編輯任何文本字符都可以改變匹配 - 要求重新掃描每個用戶鍵上的所有文本。但他們這樣做。在文本編輯器中執行正則表達式匹配突出顯示

  • 增量式基於perl的正則表達式? - 他們不是大自然
  • 嘗試搜索前面的比賽? - 上一個和下一個匹配可能會丟失或離屏幕太遠,需要重新掃描文檔的最大部分,正則表達式也會被打破
  • 另一個線程? - 似乎是唯一真正的解決辦法,但您會收到煩人的高亮滯後
    • 可能移動的老對手用戶輸入manualy高亮(但我們仍然有新的匹配高亮/老高亮除去滯後的問題)
    • 可在屏幕緩衝區搜索(大多數用戶正則表達式消耗短字符串),然後突出顯示找到其他長期匹配與滯後(更好的展現亮點比從不遲到)運行的線程

我想知道更多關於存在的實現。

例如,我們有:5,9 MB文件(開始與ABC,與ABC結束)和2正則表達式:ABC(.|\n)*abcusing(.*?);

  • 崇高文本(regex1的):正則表達式的堆棧空間
  • 崇高文本(regex2):滯後〜300毫秒,不更新屏幕,直到關鍵了
  • 的EditPad精簡版7(regex1的):〜500毫秒滯後於文字輸入,如果去掉最後的 'C' - 5000毫秒
  • 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 - 突出顯示文件滾動到結束,沒有延遲,突出顯示會一直運行,直到向上滾動17445行300行,然後丟失並不返回。怎麼運行的?
  • 的Vim(regex2):沒有滯後,沒有錯誤
每個用戶條目

整個文件掃描:

  • .NET正則表達式(regex1的):〜300毫秒滯後於文本輸入(如刪除從文本最後的 'C' - 凍結永遠)
  • .NET正則表達式(regex2):〜300毫秒
  • .NET 86 PCRE笨拙2功能封裝(regex1的):失敗,出現錯誤
  • .NET 86 PCRE笨拙2個函數包裝(重新包裝) gex2):〜300毫秒

回答

0

如果有人有興趣 - 我用緩衝區大小=屏幕字符+股票(只是不突出重大比賽)