黄瓜不匹配:尝试将多个匹配组绑定到单个stepdef参数

时间:2013-12-07 22:41:14

标签: java regex cucumber cucumber-jvm

我正在尝试创建一个与以下内容匹配的正则表达式:

Given I'm a user
Given I am a user
Given Dylan is a user

这是我的步骤定义:

@Given("^(?:(I)'m|(I) am|(.+) is) a user$")
public void aUserExists(String username) throws Throwable {
}

它符合我的需要,但似乎Cucumber正在尝试将非捕获组中的每个捕获组分配给参数,而我希望它只分配一个:

  

cucumber.runtime.CucumberException:Arity不匹配:步骤定义'hello.MyStepdefs.aUserExists(String)in [...] with pattern [^(?:( I)'m |(I)am |(。+ )))用一个参数声明用户$]。但是,小黄瓜步骤有3个参数[I,null,null]。

我来自PHP背景,这个正则表达式适用于Behat。也许我没有得到关于Java正则表达式或Cucumber行为的信息。


更新

由于目前所有答案都有同样的问题,我正在更新问题。

我不想匹配像:

这样的字符串
Given I is a user

我希望仅在I'm后跟am匹配。我希望用Java正则表达式和Cucumber做一件不可能的事情。

3 个答案:

答案 0 :(得分:2)

我不确定这是否是您正在寻找的,但如果您想在第一组中捕获用户名而不创建更多组,那么可以尝试

"^(\\w+)(?:(?<=I\\b)(?:'m| am)|(?<!^I\\b) is) a user$"

答案 1 :(得分:1)

你可以重写正则表达式只使用一个捕获组,虽然它变得丑陋:

@Given("^(I(?='m| am)|.+(?= is))(?:'m| am| is) a user$")

答案 2 :(得分:0)

var _reactMapGl = require('react-map-gl');与您的正则表达式无关,而是您的Arity mismatch:行与您的方法签名不匹配Given I'm a user取出字符串参数并重试。