![]() |
1
8
这里有点阻抗不匹配。您希望使用.Net中使用字符串(多字节字符)的正则表达式,但希望使用单字节字符。不能像往常一样同时使用.Net。 但是,要打破这种不匹配,可以以面向字节的方式处理字符串并对其进行变异。变异后的字符串可以作为一个可重用的缓冲区。这样,您就不必将字节转换为字符,或将输入缓冲区转换为字符串(根据您的问题)。 举个例子:
显然这是不安全的代码,但它是.Net。 正则表达式的结果将生成字符串,所以这里有一个问题。我不确定是否有一种使用Regex的方法不会生成新字符串。当然可以获得匹配索引和长度信息,但是字符串的生成违反了内存效率的要求。 更新
|
![]() |
2
2
如果我面对这个问题,我会做C++ + CLI包装器,除非我为我想要的东西创建专门的代码。最终随着时间的推移开发包装器来做一般的事情,但这只是一个选择。 第一步是仅包装Boost::Regex输入和输出。在C++中创建专门的函数,它可以完成所有想要的东西,并使用CLI将输入数据传递给C++代码,然后用CLI返回结果。在我看来,这不是太多的工作要做。 更新: 让我试着澄清我的观点。即使我可能错了,我相信你也找不到 .NET二进制正则表达式 可以使用的实现。这就是为什么-不管您喜欢与否-您将被迫在CLI包装和字节到字符转换之间进行选择,以使用.NET的Regex。在我看来,包装机是更好的选择,因为它会工作得更快。我没有做任何基准测试,这只是基于以下假设:
|
![]() |
3
1
作为使用unsafe的替代方法,只需考虑编写一个简单的递归比较器,如:
|
![]() |
4
0
我个人采用了另一种方法,编写了一个可以扩展的小型状态机。我相信,如果解析协议数据,这比regex可读得多。
|
![]() |
Andre · Boost日志琐碎自动刷新 6 年前 |
![]() |
Vitor · 如何使用boost::bind追加参数? 6 年前 |
![]() |
slepasteur · 提高MSM编译速度 6 年前 |
![]() |
werk jlcv · 如何快速删除数百万个文件 6 年前 |
![]() |
hromer · 我的Boost正则表达式与任何内容都不匹配 6 年前 |
![]() |
user997112 · 使用互斥量和条件变量跨内存提升进程间共享向量 6 年前 |