c - 用于匹配消息的 POSIX 正则表达式

标签 c regex posix

我正在使用 POSIX C 正则表达式。我需要一个正则表达式来匹配消息中的多个字段。它还必须拒绝任何与格式不匹配的消息。消息格式为:

字符串1|整数1|字符串2|字符串3|整数2|...整数N`

“|”字符用作字段之间的分隔符。最终的整数是一个包含 0 个或多个项目的列表。任何字段都可以为空白(分隔符之间没有空格、没有隐藏字符)。

基本上我只是希望能够单独提取字段。

到目前为止我已经:

.*|[0-9]3|.*|.*|([0-9]3|)50[\`]

为了清楚起见,我在写这篇文章时没有使用任何转义字符。我还添加了每个字段可以包含的项目数。我忘记了消息字符的结尾。

最佳答案

尝试

^([^|]+)\|([[:digit:]]+)\|([^|]+)\|([^|]+)((\|[[:digit:]]+)*)$

在您最喜欢的正则表达式引擎中。如果您的 String 项的性质受到限制,建议将它们合并到模式中以实现更可靠的错误检测。各个部分可用作捕获组 1 到 5,其中 #5 包含所有最终整数。我不知道有哪个正则表达式引擎可以自动分段部分模式,但您应该能够使用类似于 Perl 的 split(/\|/, $_) 的方法来达到此目的。

关于c - 用于匹配消息的 POSIX 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17818920/

相关文章:

c - C语言手动排序链表

javascript - 正则表达式查找与两个字符串匹配的模式,两个字符串之间的空格数为 'x'

regex - 将定义的变量与egrep一起使用来匹配文本文件内的内容

posix - 加载共享库时自动执行的函数

c++ - 使用互斥量时出错

regex - 如何匹配 IPv4 地址

c - 纹理映射圆

c - getch() 在 C 中究竟做了什么?

c - opengl交错vbo不渲染到屏幕

Javascript 正则表达式 : is there anyway to write a regex which gives true if backreference is NOT matched