0
我想用Ruby的OptionParser来解析命令行参数。我的一个参数是我定义这样不区分大小写OptionParser
opts.on('-p', '--project-name PROJECT', PROJECTS, 'The Project name', "{#{PROJECTS.join ', '}}"){|p| options.project = p}
其中PROJECTS
是一个字符串的预定义列表(我是红宝石1.8.7)接受字符串的预定义列表。我如何告诉OptionsParser应该使用POJECTS列表以不区分大小写的方式匹配参数?我看到类OptionParser :: List可能有这样的东西,我只是不知道如何使用它。
不要你的意思'Regexp.union(项目)'而不是那个地图/ escape/stringify/join/regexify的东西? –
@ muistooshort我曾尝试过'Regexp.union',但那么您如何使得到的正则表达式不区分大小写?如果你做'/#{Regexp.union PROJECTS}/i',你会得到匹配区分大小写的'/(? - mix:foo | bar | baz)/ i',因为混合的正则表达式有自己的修饰符。我能想到的唯一选择是'Regexp.union PROJECTS.map {| p | /#{p}/i}'这并不会更好,并且会生成一个更复杂的正则表达式,例如'/(?i-mx:foo)|(?i-mx:bar)|(?i-mx:baz)/' 。 –
@ muistooshort好的另一种选择是'Regexp.new(Regexp.union(PROJECTS).source,Regexp :: IGNORECASE)',这是目前为止我认为最好的选择。改变了我的答案。 –