0

当被询问时,IntelliJ 会自动从 .feature 文件为此 Gherkin 创建一个 ruby​​ 步骤

And I "foo" bar

就像在 .rb 文件中一样

When /^I "([^"]*)" bar$/ do |arg|
  pending
end

我对 [^"]* 而不是 .* 感到困惑

我也有一位同事提到我应该使用 .*? 而不是上述任何一个。我要求他提供一组 Gherkin 字符串的具体示例,这些字符串将在以下任何 ruby​​ 步骤之间进行不同的解析。

一个红宝石步骤使用的地方

When /^I "([^"]*)" bar$/ do |arg|
  pending
end

另一种用途

When /^I "(.*)" bar$/ do |arg|
  pending
end

还有另一个用途

When /^I "(.*?)" bar$/ do |arg|
  pending
end

但他从来没有给我回复过一个对这三者中的任何一个产生影响的人。我想他从来没有找到一个很好的例子。

我认为 .* 是所有三个正则表达式中最简单的,我想在我的 ruby​​ 步骤定义中主要使用它。有人可以提供具体示例,说明从正确性的角度来看,其他两个步骤中的任何一个步骤明显具有优势吗?我不在乎正则表达式解析时间。

4

1 回答 1

2

.*将导致像This is a "test" string with multiple " in place". ".*"将匹配子字符串"test" string with multiple " in place"while"[^"]*"并且".*?"仅匹配"test". 这是因为*它是一个贪婪的量词,它会尝试匹配尽可能多的字符。

是否使用[^"]*or .*?:就正确性而言并不重要。

于 2013-10-14T14:23:52.947 回答