按照引号和反斜杠正确地分割字符串(Ruby)

4
我想通过空格来分割字符串(不安全的外语行,如exim_mainlog行),但不要按照双引号内的空格分割,并忽略用反斜杠转义的引号(例如\"),并且如果只是转义了反斜杠(例如\\),则忽略该反斜杠。不需要手动用FSM慢速解析字符串。
示例行: U=mailnull T="test \"quote\" and wild blackslash\\" P=esmtps 应该分成: ["U=mailnull", "T=\"test \\\"quote\\\" and wild blackslash\\\"", "P=esmtps"] (顺便说一下,我认为Ruby应该有这样的分割方法……唉)。
1个回答

8
我认为我找到了一个足够简单的解决方案:input.scan(/(?:"(?:\\.|[^"])*"|[^" ])+/)

嗨,Catpnosis。你能解释一下这个吗? - vijikumar
1
@vijikumar scan() 将收集匹配的单词,它将匹配任何非引号/空格字符 ([^" ]) 的连续性 (最新的 +),或者如果引号开始 ("(),它将匹配直到关闭引号 ()*") 任何 (*) 转义字符 (\\.) 或非引号字符 ([^"])。 - catpnosis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接