这是一个场景:我最近的任务是为我们现有的应用程序编写一个rs232串行设备通信接口.此应用程序具有基本类来进行实际通信.基本上我所做的就是接受一个字节数组进入我的类然后处理它.
部分问题是,一次传递的字节数组不能超过1000个字节,但可能有更多数据等待进入该事务.所以我不知道交付给我的是完整的.我正在做的是将1000字节数组转换为字符串并将其填充到缓冲区中.然后,此缓冲区运行正则表达式以查看添加的内容是否创建完整的事务.我知道如果它匹配特定的签名(在开头和结尾基本上是一系列控制代码),它就完整了.如果在垃圾数据进入并且无法匹配的情况下没有找到匹配,则此缓冲区将仅在放弃之前附加数据最多3次.这不是一个高数据量的设备,所以我不希望大量的数据不断涌入.并且正则表达式最多只能执行3000个字符.
到目前为止它工作得很好,但我的问题是正则表达式可怕吗?对于我正在使用它们的性能,是否有任何后果?我的理解是正则表达式通常对大量数据不好,但我觉得这很小.
这是正则表达式吗?
相反,正则表达式非常适合匹配数据序列中的模式.
对于我正在使用它们的性能,是否有任何后果?
正则表达式可以用非常低效的方式编写,但这通常是特定正则表达式的问题,而不是正则表达式作为一种技术.
我的理解是正则表达式通常对大量数据不好,但我觉得这很小.
"大"和"小"没有通用的定义.根据正则表达式引擎,您的表达式通常会转换为表达式描述的状态机.这些机器在它们的工作中非常有效,在这种情况下,数据块的大小可能非常大.另一方面,人们可以编写一个带有大量回溯的正则表达式,即使在100个字符或更少字符的输入字符串上也会导致不可接受的性能.