c# - 在 Stream 上应用正则表达式?

标签 c# .net regex streaming

我正在寻找在流上应用正则表达式的快速且安全的方法。

我在互联网上找到了一些例子,这些例子讨论了将每个缓冲区转换为字符串,然后在字符串上应用 Regex

这种方法有两个问题:

  • 性能:转换为字符串并对字符串进行 GC 处理会浪费时间和 CPU,如果有更原生的方法在 Streams 上应用 Regex 肯定可以避免。
  • Regex 支持:Regex 模式有时只有在将两个缓冲区组合在一起时才能匹配(缓冲区 1 以匹配的第一部分结束,缓冲区 2 以比赛的第二部分)。转换为字符串的方式无法原生处理这种类型的匹配,我必须提供更多信息,例如模式可以匹配的最大长度,这根本不支持 + 和 * 正则表达式符号,永远不会支持(无限匹配长度)。

因此,转换为字符串的方式并不快,并且不完全支持Regex

是否有任何方法/库可用于在 Streams 上应用 Regex 而无需转换为字符串并具有完整的 Regex 支持?

最佳答案

英特尔最近开源了hyperscan BSD 许可证下的库。它是一个高性能的非回溯基于 NFA 的正则表达式引擎。

特点:能够处理输入数据流和同时进行多种模式匹配。最后一个不同于 (pattern1|pattern2|...) 方法,它实际上同时匹配模式。

它还利用英特尔的 SIMD 指令集,如 SSE4.2、AVX2 和 BMI。 可以找到工作设计和解释的摘要here . 它还具有出色的开发人员 reference guide有很多解释以及性能和使用注意事项。 小article关于在野外使用它(俄语)。

关于c# - 在 Stream 上应用正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1962220/

相关文章:

.net - 根据 Regex.Matches MatchCollection 替换字符串中的内容

Javascript 函数使用正则表达式删除字符串中的所有数字

c# - 如何在 visual studio 2012 中生成 c# 文档到 chm 或 html 文件?

c# - 避免 Uris 上的数据库信息

c# - 查询数据库的数组 int

c# - 在自动生成用于绑定(bind)到事件的代码时更改 Visual Studio 中的默认行为

c# - 如何在 Crystal 报表中管理页面大小和页边距?

php - 标点符号的字符串差异 : is preg_split the answer?

c# - 在一种情况下 Dispatcher.BeginInvoke 未执行

.net - COM 注册 : does location matter?