我正在尝试创建一个匹配以下内容的正则表达式:
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 mismatch: Step Definition 'hello.MyStepdefs.aUserExists(String) in [...] with pattern [^(?:(I)'m|(I) am|(.+) is)一个 user$] 用 1 个参数声明。但是,小黄瓜步骤有 3 个参数 [I, null, null]。
我来自 PHP 背景,这个正则表达式与Behat配合得很好。也许我对 Java 正则表达式或 Cucumber 行为一无所知。
更新
由于所有当前答案都存在相同的问题,因此我正在更新问题。
我不想匹配这样的字符串:
Given I is a user
我只想I
在它后面跟着'm
or时匹配am
。我希望用 Java 正则表达式和 Cucumber 来做这件事不是一件不可能的事情。