C语言中如何获取两个子串之间的子串?
我有一个数据包捕获代码,可将 http 有效负载写入文件中。现在我想从这些转储中提取 URL 信息。 对于每个数据包,有效负载都是这样开始的。
获取 /intl/en_com/images/logo_plain.png HTTP/1.1..主机: www.google.co.in..用户代理: Mozilla/5.0
我想提取:
- “GET”和“HTTP/1.1”之间的字符串
- “Host:”和“User-Agent”之间的字符串
如何在 C 中执行此操作?有没有内置的字符串函数?或者正则表达式?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
C 没有内置正则表达式,但可以使用库: http://www.arglist.com /regex/, http://www.pcre.org/ 是我看到的两个最常见。
对于如此简单的任务,您无需使用正则表达式即可轻松完成。如果这些行都小于某个最大长度
MAXLEN
,只需一次处理一行:此解决方案不需要像 KennyTM 的答案那样将整个文件缓冲在内存中(尽管这样也可以)如果您知道文件很小,则采用这种方式)。请注意,我们使用
fgets()
而不是不安全的gets()
,后者很容易在长行上溢出缓冲区。C doesn't have built-in regular expressions, though libraries are available: http://www.arglist.com/regex/, http://www.pcre.org/ are the two I see most often.
For a task this simple, you can easily get away without using regexes though. Provided the lines are all less than some maximum length
MAXLEN
, just process them one line at a time:This solution doesn't require buffering the entire file in memory as KennyTM's answer does (though that is fine by the way if you know the files are small). Notice that we use
fgets()
instead of the unsafegets()
, which is prone to overflow buffers on long lines.使用
strchr
(或strstr
)查找\r
的位置。由于字符串GET
和HTTP/1.1
以及Host:
是固定长度的,因此可以轻松提取其间路径的索引和位置。如果你想使用正则表达式,在 POSIX 兼容的系统上有 regcomp(3) ,但这也很难使用。
Look for the location of
\r
usingstrchr
(orstrstr
). Since the stringsGET
andHTTP/1.1
andHost:
are of fixed length, the index and location of the path in between can be extracted easily.If you want to use regular expressions, on POSIX-compliant systems there is
regcomp(3)
, but that's also quite hard to use.