验证包含1、2、3或4个字段的字符串
Validate a string containing 1, 2, 3, or 4 fields?
我需要一些帮助,为可能包含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"语句来做了
对于检查规则,这可能是更好的选择。您仍然可以使用正则表达式对字符串进行标记。
您可能还想看看解析器生成器,因为您似乎已经有了可用的语法。生成器将从中生成解析器代码,可以调用它来检查输入的有效性,并返回有用的错误消息。
相关文章:
- 使用 Boost::Hana 中的 BOOST_HANA_DEFINE_STRUCT 定义具有 40 个以上字段的结构
- 如何从对象/类中找到第一个字段?
- C++创建一个链表,每个节点有超过 2 个字段
- 为什么字段中的第二个变量没有更改
- 可以将模板字段参考模板参数作为第一个模板参数传递
- 如何从具有多个对象/字段的类中调用方法函数
- 两个 4 位位字段加起来不等于一个字节的大小 - 如何修复?
- 定义静态类字段时多个已定义符号的链接器错误
- 将两个重复字段与C++ API 进行比较
- C 中的多个相邻位字段
- 设计具有变体字段的文本类型类,其中可以存储一个或三个对象
- 在特定字段中关键字搜索后,从文本文件中提取多个记录
- C 列表一次由多个字段排序
- 是否必须在内存中"next to each other"两个相邻声明的公共字段?
- 使2个非静态字段(即动态数组)相互接近使用内存
- 查询中的多个字段在 C++生成器 6 中不起作用
- 将对象的第一个字段强制转换为对象的类型是否真的安全?
- 字段的类型不完整,从多个文件编译
- 将多个字段合并为一个字段
- 如何创建具有4个字段和每个字段9个字符长度的矢量对象