2011-10-18 56 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