正则表达式在空格上分裂但没有转义空格
我想拆分标准空格" "
但不转义空格“\”
例如,使用字符串'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]
这是'空间'的角色类
(?![\\])
这告诉正则表达式引擎匹配一个前面带有反斜杠“\”的空格(这里用另一个反斜杠转义)