使用'|的正则表达式非捕获组' (要么)

时间:2018-08-21 20:46:58

标签: c++ regex

我正在为黄瓜测试编写一个步骤文件。我正在尝试匹配功能文件中的短语。

我在功能文件中包含以下内容:

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上的值时,这一切都有意义。
这都是我的假设,我不想仅仅因为我验证了这一点就认为这是正确的。

此外,是否有更好的方法(使用正则表达式)对初始示例进行排序?

0 个答案:

没有答案