2011-10-18 156 views
0

我必须阅读一些红宝石用户输入。输入主要由正则表达式组成,所以我想通过空格拆分它以获得单独的表达式。但问题是,像'/[0-9] [0-9]/'这样的东西会分成两部分,我不想要。红宝石输入处理

我想到的解决方法是只读取字符串,直到找到表达式的开始和结束,然后在那里将其剪切以获取子字符串,然后重复。不知道这是否是最好的方式。任何其他想法?

样品输入:

/-//[a-z][0-9]/ bbb

+0

的通常的做法是要求用户在引号中包含参数(如果它们包含空格)。 –

+0

你能告诉我们从用户输入中读取正则表达式的主要思想是什么? – user973254

+0

这实际上是一项家庭作业。我试图找出最聪明的方法来做到这一点。 – moose

回答

0

可能是你可以使用红宝石下面的正则表达式与scan

/\/[^\/]*\/|\S+/ 

这里是一个示例IRB会话:

irb(main):001:0> s = '/-//[a-z][0-9]/ bbb' 
=> "/-//[a-z][0-9]/ bbb" 
irb(main):002:0> s.scan(/\/[^\/]*\/|\S+/) 
=> ["/- /", "/[a-z][0-9]/", "bbb"] 

我不知道它是否适用于您的所有输入数据bu它适用于这个例子。

现在,如果正则表达式可以有反斜杠他们的内部,特别是\/然后你必须使用另一个正则表达式:

/\/(?:\\.|[^\\\/])*\/|\S+/ 

这里是新的正则表达式的样本IRB会话:

irb(main):003:0> s = '/- \/ \///[a-z][0-9]/ bbb' 
=> "/- \\/ \\///[a-z][0-9]/ bbb" 
irb(main):004:0> s.scan(/\/(?:\\.|[^\\\/])*\/|\S+/) 
=> ["/- \\/ \\/ /", "/[a-z][0-9]/", "bbb"] 
+0

我实际上把我的程序打破了3-4个主要案例,只是处理了这些问题,但这看起来像一个可靠的通用解决方案,谢谢! – moose