0

'MN+WI'たとえば、URL の末尾にあるような値を照合しようとしています/foos/MN+WI。このパターンは、 rubular.com では[a-zA-Z][\+\,]?一致結果を生成しますが、IRB では次のようになります。MN+WI

s="MI+WI"
p="[a-zA-Z]{2}[\+\,]?"
r=Regexp.new(p)
r.match(s) # => #<MatchData "MI+"> 

Ruby コンソールでの動作は、私が Rails で遭遇したものと一致しています。両者に違いはありますか?正規表現パターンを調整するにはどうすればよいですか?

$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.3.0]

$ rails -v
Rails 4.0.0

** 編集 **

元のパターンは だったはず[a-zA-Z]{2}[\+\,]?です。

ルートにこれらのバリエーションのいずれかを認識させ、それをパラメーターに割り当てるために本当に必要なもの:

  • MN(働く)
  • mn(働く)
  • MN+WI(動作していません)
  • MN+WI+IA( で区切られた 2 文字の値の任意の数+)
  • 1 つまたは 2 文字を超える値には一致しませんABCが (例: )、2 文字の値は保持します (例ABC+MN: keep MN) 。
4

3 に答える 3

2

あなたの正規表現は、「オプションの+ または ,が続く 2 文字」を意味します。したがって、文字列には2つの一致があります。Rubular はすべての一致を強調表示し、文字列全体が一致しているように見えますが、実際には MN+ と WI の 2 つの異なる一致があります。

于 2013-11-08T15:59:43.900 に答える
2

コメントで言ったように、[a-zA-Z][\+\,]?MN + WI と一致しません。Rubular で表示されているのは、実際には 2 つの一致です。最初の試合はMN+で、2 番目の試合はWIです。Rubular はすべての一致を強調表示するだけなので、1 つの長い一致のように見えますが、実際には 2 つの一致があります。この動作は、Rubular とローカルの Ruby インストールの間で一貫している必要があります。

于 2013-11-08T15:57:09.470 に答える
1

Rubular は、パターンを繰り返し適用した結果を示しています。

[a-zA-Z][\+\,]?

そのパターンをキャプチャ グループに入れると、個々の一致が表示され ( http://rubular.com/r/h5iBa5k0frを参照)、それぞれが . を除く 1 つの文字に一致しN+ます。

IRB コードは 1 つの一致を返します。ただし、IRB コードが上記の正規表現とは異なることに注意してください{2}

于 2013-11-08T15:59:36.327 に答える