我正在尝试创建一个程序来读取文件并搜索特定的字符组合。 例如:“/ start / 4jy42jygsfsf / end /”。
所以我想找到以/ start /开头并以/ end /.
结尾的所有“字符串”为了做到这一点,我使用read()函数,因为该文件可能是一个二进制文件(它不一定是带有字符的文件)。
我将read()函数称为:
#define BUFFSIZE 4000
// more declarations
while (read(file_descriptor, buffer, BUFFSIZE) > 0)
{
//search for /start/
//then search for /end/
//build a string with all the chars between these two
//keep searching till you reach the end of buffer
}
假设每个/ start /之后是/ end /.
问题是:
如何处理将这些字符组合切成两半的情况?
例如,假设第一次调用read(),在此缓冲区的末尾我发现 / star ,下一次read()在第二次调用时被调用缓冲区有 t / 4jy42jygsfsf / end / 。
这种组合可能会在任何地方被削减。我认为解决方案会导致很多行代码。有没有聪明的方法来处理所有这些案件?
答案 0 :(得分:0)
当您到达缓冲区的末尾时,记录当前部分匹配的状态(如果有)。然后当你得到下一个缓冲区时,你有4个一般情况:
/
/start/
内。另一个变量记录了你匹配的距离。/end/
内。与/start
相同的变量/记录您匹配的距离。匹配器内的状态通常是:
/
- 接下来正在寻找一个''或者是'。start/
或end/
。/start
或/end
。基于部分匹配,只需在匹配器中跳转到正确的状态。
OR
您可以使用PCRE library。它支持部分匹配。但对你的目的来说可能有点过分了。