2010-09-21 27 views
43

這可能不是您期待的問題!我不想要一個匹配換行符的正則表達式;相反,我想寫一個長的正則表達式,爲了便於閱讀,我想分割成多行代碼。在多行中分割Ruby正則表達式

喜歡的東西:

"bar" =~ /(foo| 
      bar)/ # Doesn't work! 
# => nil. Would like => 0 

能不能做到?

回答

37

您需要使用/x修飾符,該修飾符啓用free-spacing mode

+24

這個回答這個例子可以用一個更詳細的解釋更換鏈接得到改善。 – mkataja 2015-06-12 08:46:52

2

你可以使用:

"bar" =~ /(?x)foo| 
     bar/ 
+6

這個答案對我的情況有幫助,但是隻有在我搜索了什麼(?x)意思並且能夠添加更多上下文之後。我會很高興,如果這個答案被更新,以更明確地說明它的說明。對於其他感興趣的人,我發現關於(?on-off)構造的註釋在這裏很有幫助:http://ruby-doc.org/core-1.9.3/Regexp.html#class-Regexp-label-Options – 2015-05-29 04:27:59

+0

@BenParizek也許你可以在這裏添加一個簡短的解釋作爲評論? – 2018-02-07 19:21:18

+0

我不是這方面的專家,但據我所知,這裏的大多數答案都是說同一件事的不同版本。問題是複雜的正則表達式很難閱讀。一般的答案是:您可以啓用自由間距模式來幫助使正則表達式更具可讀性。有多種方法可以啓用自由間隔模式。 1)你可以在末尾分隔符'/ myregex/x'後面添加修飾符,2)可以使用(?on-off)構造'/ myregex(?x)在自由間距/ ',3)可以使用'%r {myregex} x'語法。 – 2018-02-08 01:43:38

78

使用%R與x選項是首選的方式來做到這一點。

請參閱從GitHub的紅寶石風格指南

regexp = %r{ 
    start   # some text 
    \s   # white space char 
    (group)  # first group 
    (?:alt1|alt2) # some alternation 
    end 
}x 

https://github.com/styleguide/ruby

+2

下面的例子。正則表達式中的註釋對可維護性做出了奇蹟​​。 – 2015-08-19 16:36:55

+3

或者使用/而不是%r,因爲如果正則表達式不在斜槓之間,rubocop會抱怨。也是他們的風格指南,推薦它是這樣的:https://github.com/bbatsov/ruby-style-guide#regular-expressions – ytg 2016-05-08 11:18:05