ruby正则表达式,拆分为多行
可能重复:ruby正则表达式,拆分为多行,ruby,regex,Ruby,Regex,可能重复: 如果我在ruby中有一个很长的正则表达式,我如何将它分成多行以使其更具可读性 有没有一个简单的方法可以做到这一点 line.regexp = /^([^\ ]+) ([^\ ]+) \[(#{timestamp('%d/%b/%Y:%H:%M:%S %z')})?\] (#{ip_address}) ([^\ ]+) ([^\ ]+) (\w+(?:\.\w+)*) ([^\ ]+) "([^"]+)" (\d+) ([^\ ]+) (\d+) (\d+) (\d+)
如果我在ruby中有一个很长的正则表达式,我如何将它分成多行以使其更具可读性 有没有一个简单的方法可以做到这一点
line.regexp = /^([^\ ]+) ([^\ ]+) \[(#{timestamp('%d/%b/%Y:%H:%M:%S %z')})?\] (#{ip_address}) ([^\ ]+) ([^\ ]+) (\w+(?:\.\w+)*) ([^\ ]+) "([^"]+)" (\d+) ([^\ ]+) (\d+) (\d+) (\d+) (\d+) "([^"]*)" "([^"]*)"/
您需要使用
/x
修饰符,它表示自由间距模式。这里有更多信息。我可以想出三种方法来提高代码的可读性。使用:
/x
修饰符并添加带有#
的注释(?#comment_此处)
修饰符内联注释(?\d{2,4})
对于以后的反向引用或操作值非常有用除了使用其他答案中提到的
/x
之外,创建分段的正则表达式,然后逐渐将它们组合在一起,允许您从原子大小的小片段开始,然后慢慢增长正则表达式。您将看到使用一些巨大的模式来完成此操作,例如用于解析电子邮件地址、internet URL等的模式
例如,这来自Ruby的OpenURI源代码:
RE_LWS = /[\r\n\t ]+/n
RE_TOKEN = %r{[^\x00- ()<>@,;:\\"/\[\]?={}\x7f]+}n
RE_QUOTED_STRING = %r{"(?:[\r\n\t !#-\[\]-~\x80-\xff]|\\[\x00-\x7f])*"}n
RE_PARAMETERS = %r{(?:;#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?=#{RE_LWS}?(?:#{RE_TOKEN}|#{RE_QUOTED_STRING})#{RE_LWS}?)*}n
你能把你的正则表达式贴在这里吗,这样我们就可以实际操作它了?
/(?:;(?-mix:[\r\n\t ]+)?(?-mix:[^\x00- ()<>@,;:\\"\/\[\]?={}\x7f]+)(?-mix:[\r\n\t ]+)?=(?-mix:[\r\n\t ]+)?(?:(?-mix:[^\x00- ()<>@,;:\\"\/\[\]?={}\x7f]+)|(?-mix:"(?:[\r\n\t !#-\[\]-~\x80-\xff]|\\[\x00-\x7f])*"))(?-mix:[\r\n\t ]+)?)*/n