2017-04-02 98 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

如果有人有兴趣 - 我用缓冲区大小=屏幕字符+股票(只是不突出重大比赛)

相关问题