2012-09-04 238 views
2

「有什麼區別?在黃瓜步驟定義中使用以下兩個語句有什麼區別?當我在Rubular中測試它們時,它們都適用於所有情況我可以想象,在第二種情況下,我的語法突出顯示更有可能看起來不錯(不需要額外的雙引號就可以搞砸了)「[^」] *「和」。+「和」

即使在堆棧溢出語法突出顯示中,它也會在第一個什麼是比較常見的第一個例子中的優勢

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" 再次運行你的模式,他們是不一樣的:)

+0

因此,如果我有相同的開始相似的步驟,執行明智,[^」] *更可靠。讓我希望cuke解析器能夠在正則表達式中解釋這一點。 –

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 

,這意味着你只能有在你的測試用例中引用一個值 - 這比第一個正則表達式的限制更有限制(只能包含不包含引號字符的引用值)。

1

我不是紅寶石的大師,但是第一個正則表達式表示:

  • ^線開始
  • My name is "文字字符串後面是"
  • (開始捕獲組
  • [開始一個字符類
  • ^"在一個字符類中, ^的意思是「不是」,所以在這種情況下,它意味着什麼,但字符類的"
  • ]
  • *任意數量的前述,包括0匹配
  • "引號字符
  • $行尾

第二個,一切都和上面一樣,除了字符類[]您有:

  • . 「任何字符」
  • +一個以上的前

+*之間的區別是,+要求前述的ATLEAST之一,但如果前面有零,則*也將匹配。

1

[^"]意味着除了"

.指任何字符的任何字符。

*裝置匹配的時間包括0

+意味着匹配至少1次。