正则表达式在空格上分裂但没有转义空格

我想拆分标准空格" "但不转义空格“\”

例如,使用字符串'my name\ is\ max' (单引号,因此\是文字)

我想得到["my", "name\ is\ max"]

我试过这个正则表达式: /[^\\]\s/

但结果如下:

 => ["m", "name\\ is\\ max"] 

这很接近,但我不知道如何保持my


编辑

另一个例子考虑这个字符串:

 "./db/users/WGDl-HATof-uhdtT7sPfog: email=maxpleaner@gmail.com name=max\\ p" 

我想把它分成三个:

 [ "./db/users/WGDl-HATof-uhdtT7sPfog:", "email=maxpleaner@gmail.com", "name=max\\ p" ] 

关于

我试图拆分不带反斜杠的空格。

如果您只关心空白之前的反斜杠并且没有其他特殊情况需要考虑,请在\s之前使用负向lookbehind (?

 s.split(/(? 

在这里, \s+匹配1+空格,如果没有前面的反斜杠( (?是一个负面的lookbehind ,检查当前位置左边的文本是否与模式匹配,如果是,则匹配失败)。

如果需要考虑多个空格,并且需要处理转义序列,请使用

 s.scan(/(?:[^\s\\]|\\.)+/) 

查看Ruby演示

这里, (?:[^\s\\]|\\.)+匹配除反斜杠和空格( [^\s\\] )或任何转义序列( \\. )之外的1个或多个字符。 添加/m修饰符来制作. 匹配线rest字符。

试试这个

 require 'shellwords' 'my name\ is\ max'.shellsplit # => ["my", "name is max"] 

不需要正则表达式。

试试这个: "./db/users/WGDl-HATof-uhdtT7sPfog: email=maxpleaner@gmail.com name=max\\ p".split(/(?

正则表达式的分解(?

(?这告诉正则表达式引擎匹配一个前面没有反斜杠“\”的空格(这里用另一个反斜杠转义)

[\s]这是'空间'的角色类

(?![\\])这告诉正则表达式引擎匹配一个前面带有反斜杠“\”的空格(这里用另一个反斜杠转义)