0

流れる正規表現の違いは何ですか: HEAD|GET, (HEAD|POST)& [HEAD|POST]?

基本的には、HEAD または POST の後に番号を抽出したいと考えています。

irb(main):001:0> "This is HEAD and a POST".match("HEAD|POST")
=> #<MatchData "HEAD">
irb(main):002:0> "This is HEAD and a POST".match("(HEAD|POST)")
=> #<MatchData "HEAD" 1:"HEAD">
irb(main):003:0> "This is HEAD and a POST".match("[HEAD|POST]")
=> #<MatchData "T">
irb(main):004:0> "This is HEAD 1 and a POST 2".match("[HEAD|POST] (.)")
=> #<MatchData "D 1" 1:"1">
irb(main):005:0>

最後の正規表現は、「POST」の後の「2」と一致しませんでした。なんで?また、なぜ「D 1」が一致しているのですか?

4

2 に答える 2

4

HEAD|POST(HEAD|POST)同じ文字列 (HEAD または POST)に一致します。2 つ目は文字列をキャプチャしますが、最初のものはキャプチャしません。

[HEAD|POST]ADEHOPST または | のいずれかの 1 文字に一致します。の 1文字に"This is HEAD and a POST".match("[HEAD|POST]")一致します。TThis

一方、"This is HEAD 1 and a POST 2".match("[HEAD|POST] (.)")は先頭Tにスペースが続かないため一致できません。代わりにD、 の最後にある 1 つにHEADスペースを加えたものに一致し、1その後に 1 がキャプチャされます。

于 2012-07-11T13:19:10.337 に答える
1

スキャンしてみてください:

"This is HEAD 1 and a POST 2".scan /(HEAD|POST)\s(\d)/

=> [["HEAD", "1"], ["POST", "2"]]
于 2012-07-11T13:16:14.920 に答える