c# - 将字节数组转换为字符串然后用正则表达式解析是个坏主意吗?

标签 c# regex

<分区>

场景如下:我最近的任务是为我们现有的应用程序编写一个 rs232 串行设备通信接口(interface)。这个应用程序有基类来进行实际的通信。基本上我所做的就是在我的类中接受一个字节数组然后处理它。

部分问题在于,传送的字节数组一次不能超过 1000 个字节,但可能还有更多属于该事务的数据等待传入。所以我不知道交付给我的东西是否完整。我正在做的是将那个 1000 字节的数组转换成一个字符串并将其填充到一个缓冲区中。然后这个缓冲区运行一个正则表达式来查看添加的内容是否创建了一个完整的事务。如果它与特定签名匹配(基本上是开头和结尾的一系列控制代码),我知道它是完整的。如果在垃圾数据进入的情况下找不到匹配项并且永远不可能匹配,则此缓冲区最多只会追加数据 3 次,然后才会放弃。这不是一个高数据量的设备,所以我不希望大量数据不断涌入。正则表达式最多只能执行 3000 个字符。

到目前为止它工作得很好,但我的问题是正则表达式对此很糟糕吗?对于我使用它们的目的,性能有什么影响吗?我的理解是,正则表达式通常不适合处理大量数据,但我觉得这非常小。

最佳答案

are regular expressions terrible for this?

相反,正则表达式非常适合匹配数据序列中的模式。

Are there any ramifications in regards to performance for what I'm using them for?

正则表达式可以用非常低效的方式编写,但这通常是特定正则表达式的问题,而不是正则表达式作为一种技术的问题。

My understanding is that regular expressions are typically bad for large volumes of data but I feel this is quite small.

“大”和“小”没有统一的定义。根据正则表达式引擎,您的表达式通常被翻译成表达式描述的状态机。这些机器的工作效率非常高,在这种情况下,数据 block 的大小可能非常可观。另一方面,可以编写带有大量回溯的正则表达式,即使输入的字符串不超过一百个字符,也会导致 Not Acceptable 性能。

关于c# - 将字节数组转换为字符串然后用正则表达式解析是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25983399/

相关文章:

c# - 捕捉错误

c# - 将一个事件处理程序添加到另一个事件处理程序

c# - 在我的应用程序中,EF 4.1 代码优先执行查询比常规 EF 慢 3 倍

c# - 从结果中的字符串中排除重复项

regex - 匹配 Linux Grep 命令字符串之间的任何内容

c# - 命名空间 'Cecil' 中不存在类型或命名空间名称 'Mono'

c# - 如何为页面中的多个表格应用相同的样式

regex - emacs 正则表达式中的 "Or"运算符与 `M-x occur`

python - 为什么 Python 中同时存在 sre 和 re 模块?

javascript - 如何在 JavaScript 中使用支持 Unicode 的正则表达式?