2012-10-23 27 views
3

我想用空格分隔一個字符串(不安全的外部行,如exim_mainlog行),但不能使用雙引號內的空格,而忽略引號被反斜槓\"轉義,並忽略反斜槓,如果它只是像\\那樣轉義出來。沒有用FSM手動解析字符串。用空格正確地分隔字符串佔用引號和反斜槓(ruby)

實施例線路

U=mailnull T="test \"quote\" and wild blackslash\\" P=esmtps

應分成

["U=mailnull", "T=\"test \\\"quote\\\" and wild blackslash\\\"", "P=esmtps"]

(順便說一句,我想應當紅寶石有方法用於這種分裂..,嘆)。

回答

7

我覺得我找到了足夠簡單的解決方案:input.scan(/(?:"(?:\\.|[^"])*"|[^" ])+/)

+0

嗨Catpnosis。你能解釋一下嗎? – vijikumar

+0

@vijikumar scan()將收集匹配的單詞,它會匹配任何非引號/空格字符('[^「]')的連續性(最新的'+'),或者如果引號開頭('」(')它會匹配直到結束引號(')*「')任何('*')轉義字符('\\。')或非引號字符('[^」]')。 – catpnosis

+0

不錯。謝謝--vijikumar – vijikumar

相關問題