我必須閱讀一些紅寶石用戶輸入。輸入主要由正則表達式組成,所以我想通過空格拆分它以獲得單獨的表達式。但問題是,像'/[0-9] [0-9]/'
這樣的東西會分成兩部分,我不想要。紅寶石輸入處理
我想到的解決方法是隻讀取字符串,直到找到表達式的開始和結束,然後在那裏將其剪切以獲取子字符串,然後重複。不知道這是否是最好的方式。任何其他想法?
樣品輸入:
/-//[a-z][0-9]/ bbb
我必須閱讀一些紅寶石用戶輸入。輸入主要由正則表達式組成,所以我想通過空格拆分它以獲得單獨的表達式。但問題是,像'/[0-9] [0-9]/'
這樣的東西會分成兩部分,我不想要。紅寶石輸入處理
我想到的解決方法是隻讀取字符串,直到找到表達式的開始和結束,然後在那裏將其剪切以獲取子字符串,然後重複。不知道這是否是最好的方式。任何其他想法?
樣品輸入:
/-//[a-z][0-9]/ bbb
可能是你可以使用紅寶石下面的正則表達式與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"]
我實際上把我的程序打破了3-4個主要案例,只是處理了這些問題,但這看起來像一個可靠的通用解決方案,謝謝! – moose
的通常的做法是要求用戶在引號中包含參數(如果它們包含空格)。 –
你能告訴我們從用戶輸入中讀取正則表達式的主要思想是什麼? – user973254
這實際上是一項家庭作業。我試圖找出最聰明的方法來做到這一點。 – moose