我正在为黄瓜测试编写一个步骤文件。我正在尝试匹配功能文件中的短语。
我在功能文件中包含以下内容:
A大于B
A大于或等于B
我需要用相同的表达式捕获成员和比较器。 我使用这个:
GIVEN(^(.+) is (.+)(?:(?:than)|(?:to)) (.+)$){
REGEX_PARAM(std::string, member1)
REGEX_PARAM(std::string, comparator)
REGEX_PARAM(std::string, member2)
...
这解决了我的问题,但我从未遇到过问题。我只想了解这部分正在发生什么:(?:(?:than)|(?:to))
。 为什么(?:(than)|(to))
不起作用(或((?:than)|(?:to))
?
如果我更改为(?:(than)|(to))
,则member2变为“ than”或“ to”
我的猜测是((A)|(B))实际上是两个捕获组,但是((A))和((?:A))也将是两个捕获组。当我检查C ++ std :: smatches上的值时,这一切都有意义。
这都是我的假设,我不想仅仅因为我验证了这一点就认为这是正确的。
此外,是否有更好的方法(使用正则表达式)对初始示例进行排序?