2

キュウリのステップ定義で次の 2 つのステートメントを使用する場合の違いは何ですか? Rubular でテストしたところ、想像できるすべてのケースでどちらも機能しました。2 番目の場合、構文の強調表示が適切に表示される可能性が高くなります (混乱させる余分な二重引用符はありません)。

スタック オーバーフローの構文強調表示でも、最初はおかしくなりました。より一般的な最初の例の利点は何ですか?

Given /^My name is "([^"]*)"$/ do |myname|
Given /^My name is "(.+)"$/ do |myname|
4

4 に答える 4

6

[^"]*は"を除く N (N>=0) 文字を意味します

.+は、 "を含む N (N>0) 文字を意味します。

件名が 1 文字を超え、引用符 ( " ) がない場合、2 つの正規表現パターンは等しくなります。

しかし、次の文字列を考慮してMy name is "special_name_contain_"_laugh" ください:パターンをもう一度実行してください。それらは同じではありません:)

于 2012-09-04T04:02:39.463 に答える
5

次の場合、最初のものは壊れません。

My name is "Henry James" and some other condition is "something else"

最初の正規表現は、引用符で囲まれた文字列内の文字を引用符以外の文字に制限します。したがって、Henry James. 2 番目の正規表現は、引用文字の後にその他(他の引用文字を含む) が続き、その後に終了引用文字が続くものと一致します。したがってmyname、2 番目のケースでは次のようになります。

Henry James" and some other condition is "something else

これは、テスト ケースで引用符で囲まれた値を 1 つしか持てないことを意味します。これは、最初の正規表現の制限よりもはるかに制限的です (引用符文字を含まない引用符で囲まれた値のみを持つことができます)。

于 2012-09-04T03:51:56.363 に答える
1

私は Ruby の第一人者ではありませんが、最初の正規表現は次のことを意味します。

  • ^行頭
  • My name is "が続くリテラル文字列"
  • (キャプチャ グループを開始します
  • [文字クラスを開始します
  • ^"は文字クラスで^は「ない」を意味するため、この場合は文字クラス以外を意味します。"
  • ]文字クラスの終わり
  • *0 件の一致を含む任意の数の先行
  • "引用文字
  • $行の終わり

2番目のものは、あなたが持っている文字クラスを除いて、すべてが上記と同じ[]です:

  • .「任意の文字」
  • + 上記の1 つまたは複数

との違いは、先行するものが少なくとも 1 つ必要であるということですが、先行する+もの*がゼロの場合にも一致します。+*

于 2012-09-04T03:56:53.390 に答える
1

[^"]を除く任意の文字を意味します"

.任意の文字を意味します。

*0 を含めていつでも一致することを意味します。

+少なくとも 1 回一致することを意味します。

于 2012-09-04T03:57:51.843 に答える