如何使用非捕获括号来捕获单词或什么都没有?

Mic*_*l W 2 regex cucumber cucumber-jvm

我希望使用相同步骤的两个变体我是使用cucumber-jvm的ATDD测试

然后订单通过数量限制

和

然后订单通过限制

对于不同的场景,这将更好地阅读.我尝试了以下各种变体:

@Then(value = "^order passes (?: | quantity )limits$")
public void verifyCreditPassed(){ 
    //Assert stuff
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

谢谢

Ibr*_*jar 6

你需要删除^和$元字符,然后正则表达式成为:

order passes (?:quantity |)limits
Run Code Online (Sandbox Code Playgroud)

因为当你使用^该行时必须以单词开头order并且因为你使用$了行必须结束limits,上面的正则表达式将匹配你的句子在输入字符串内的任何地方.

或使用以下正则表达式:

^Then order passes (?:quantity )?limits$
Run Code Online (Sandbox Code Playgroud)

  • `(?:数量)?`会更清洁恕我直言.(而不是在组中匹配一些文字OR,为什么不使整个组可选?你仍然要小心围绕组的空格. (2认同)