验证包含1、2、3或4个字段的字符串

Validate a string containing 1, 2, 3, or 4 fields?

本文关键字:字段 4个 字符串 包含 验证      更新时间:2023-10-16

我需要一些帮助,为可能包含1,2,3或4个字段的字符串构建正则表达式。每个字段的格式为:tag=value。

下面是我可以拥有的所有可能字符串的综合列表。代码标签是一个三位数字:

type=buy&code=123&time=yes&save=yes
type=buy&code=123&time=yes&save=no
type=buy&code=123&time=no&save=yes
type=buy&code=123&time=no&save=no
type=buy&code=123&time=yes
type=buy&code=123&time=no
type=sell&code=123&time=yes&save=yes
type=sell&code=123&time=yes&save=no
type=sell&code=123&time=no&save=yes
type=sell&code=123&time=no&save=no
type=sell&code=123&time=yes
type=sell&code=123&time=no
type=long&code=123
type=short&code=123
type=fill&code=123
type=confirm&code=123
type=cancelall
type=resendall

这些是这四个标签的可能值:

type={buy|sell|long|short|fill|confirm|cancelall|resendall}
code=[[:digit:]]{3}
time={yes|no}
save={yes|no}

这是我现在的记录:

value={buy|sell|long|short|fill|confirm|cancelall|resendall}&code=[[:digit:]]{3}&time={yes|no}&save={yes|no}

这显然是不正确的,我不知道如何使字段的数量可变。

我想使用正则表达式来检查字符串是否在c++代码的正确格式。我已经通过解析字符串和使用多个"if"语句来做这件事,这使得几十行代码,而且也容易出错。

谢谢!

这个正则表达式会这样做:

/^type=(?:(?:buy|sell)&code=d{3}&time=(?:yes|no)(?:&save=(?:yes|no))?|(?:long|short|fill|confirm)&code=d{3}|cancelall|resendall)$/

(在非捕获组中使用两个锚点,一个可选项和大量更改)

我已经通过解析字符串和使用多个"if"语句来做了

对于检查规则,这可能是更好的选择。您仍然可以使用正则表达式对字符串进行标记。

您可能还想看看解析器生成器,因为您似乎已经有了可用的语法。生成器将从中生成解析器代码,可以调用它来检查输入的有效性,并返回有用的错误消息。