我試圖瞭解在Ruby 1.9.3環境下.{n}
和?<option>:
如何在Regexp
中工作。但不明白下面的代碼是如何產生的輸出:如何。{n}和? <option>:在Ruby 1.9.3環境下的`Regexp`中工作環境
irb(main):001:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{2}(?m:.)\Z/
=> ["fin\n", "fin\r\n", "find"]
irb(main):002:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{1}(?m:.)\Z/
=> ["fin\n", "fi\n\n"]
irb(main):003:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{1}(?m:.)\Z/
=> []
irb(main):010:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\Z/
=> ["fin\n", "fi\n\n"]
irb(main):011:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(m:.)\Z/
=> []
irb(main):012:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> []
誰能幫我理解上面的代碼是如何工作的,以產生IRB
終端所提到的輸出?
感謝,
按照@Kevin最後一段下面我試過,發現預期和理想的輸出:
irb(main):014:0> %W{fin fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> ["fin"]
irb(main):015:0> %W{fin fi\n\n \n\n fin\r find}.grep /f.(?m:.)\z/
=> ["fin"]
irb(main):016:0> %W{fin fi\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> ["fin", "fi\n"]
irb(main):017:0> %W{fin fi\n \n\n fr\n find}.grep /f.(?m:.)\z/
=> ["fin", "fi\n", "fr\n"]
irb(main):018:0>
非常感謝您@Kevin 。你幫助我理解整個概念!
Ruby中的'm'選項實際上是DOTALL選項,它允許'.'匹配'\ n'。 (不知道爲什麼Ruby在這一點上有所不同)。 – nhahtdh
你不是指'。{n}'而不是'。(n)'(用'n'指定任何數字)? – 2013-01-17 18:34:28
@Tinctorius對不起!我現在糾正了。 – DoLoveSky