在黄瓜步骤定义中使用以下两个语句有什么区别?当我在Rubular中测试它们时,它们都在我能想象的所有情况下工作。在第二种情况下,我的语法突出显示更有可能看起来很好(没有额外的双引号来搞砸了)。
即使在Stack Overflow语法高亮显示中,它也会在第一次出现问题。更常见的第一个例子有什么优点?
Given /^My name is "([^"]*)"$/ do |myname|
Given /^My name is "(.+)"$/ do |myname|
答案 0 :(得分:6)
[^“] * 表示除”
之外的N(N> = 0)个字符。+ 表示N(N> 0)个字符,包括“
如果主题超过1个字符,且没有引号(“),则两个正则表达式模式相同。
但是,请考虑以下字符串:My name is "special_name_contain_"_laugh"
再次运行你的模式,它们不一样:)
答案 1 :(得分:5)
如果提供以下内容,第一个不会中断:
My name is "Henry James" and some other condition is "something else"
第一个正则表达式将引用字符串中的字符限制为非引号字符 - 因此它只会选择Henry James
。第二个正则表达式匹配引号字符,后跟其他任何(包括其他引号字符),然后是结束引号字符 - 所以myname
在第二种情况下将是:
Henry James" and some other condition is "something else
这意味着您的测试用例中只能有一个引用值 - 这比第一个正则表达式的限制更具限制性(您只能使用不包含引号字符的引用值)。
答案 2 :(得分:1)
我不是红宝石大师,但第一个正则表达式意味着:
^
行首My name is "
文字字符串后跟"
(
启动了一个捕获组[
启动角色类^"
在字符类中,^
表示“不是”,所以在这种情况下,它意味着除了"
]
字符类结尾*
前面的任意数量,包括0场比赛 "
引用字符$
行尾第二个,除了你所拥有的角色类[]
外,一切都与上面相同:
.
“任何角色”+
一个或更多前面的 +
和*
之间的区别在于+
至少需要其中一个,但*
也会匹配,前提是零。
答案 3 :(得分:1)
[^"]
表示除"
.
表示任何字符。
*
表示任何时候匹配包括0。
+
表示至少匹配一次。