这可能不是您期望的问题!我不希望能在换行符上匹配的正则表达式;相反,我想编写一个长的正则表达式,出于可读性考虑,我想拆分成多行代码。
就像是:
"bar" =~ /(foo|
bar)/ # Doesn't work!
# => nil. Would like => 0
能做到吗
Answers:
最好将%r与x选项一起使用。
请参阅github ruby样式指南中的示例
regexp = %r{
start # some text
\s # white space char
(group) # first group
(?:alt1|alt2) # some alternation
end
}x
regexp.match? "start groupalt2end"
https://github.com/github/rubocop-github/blob/master/STYLEGUIDE.md#regular-expressions
您可以使用:
"bar" =~ /(?x)foo|
bar/
/myregex/x
,2)您可以使用(?on-off)构造一路切换自由间距模式/myregex(?x) with free spacing/
,3)您可以使用%r{myregex}x
语法。
我建议不要将正则表达式的中间表达切成小段:
full_rgx = /This is a message\. A phone number: \d{10}\. A timestamp: \d*?/
msg = /This is a message\./
phone = /A phone number: \d{10}\./
tstamp = /A timestamp: \d*?/
/#{msg} #{phone} #{tstamp}/
对于长字符串,我也是如此。
/x
修饰剂,因为我不得不\s
到处撒些东西。分解正则表达式要快得多,并且可以说更易于阅读和维护。