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);第二个捕获字符串,而第一个没有。

[HEAD|POST]匹配单个字符,任何 ADEHOPST 或 |。所以"This is HEAD and a POST".match("[HEAD|POST]")匹配. T_This

另一方面,"This is HEAD 1 and a POST 2".match("[HEAD|POST] (.)")不能匹配前导T,因为它后面没有空格 - 相反,它匹配D末尾的单个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 回答