我正在使用 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/