ruby - 正则表达式拆分空白但不转义空白

标签 ruby regex

我想根据标准空格 "" 进行拆分,但不使用转义空格 "\"

例如,对于字符串 'my name\is\max'(单引号所以 \ 是文字)

我想获取["my", "name\is\max"]

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

但结果是这样的:

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

这很接近,但我不知道如何在 my 中保留 y


编辑

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

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

我想把它分成三部分:

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

最佳答案

关于

I'm trying to split on whitespace that is not preceeded by a backslash.

如果您只关心空格前的反斜杠并且没有其他需要考虑的特殊情况,请使用负向后视 (?<!\\)之前 \s :

s.split(/(?<!\\)\s/)

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

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

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

参见 Ruby demo

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

关于ruby - 正则表达式拆分空白但不转义空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579214/

相关文章:

ruby - 为什么我的 rdebug session 显示 "*** No sourcefile available"

ruby-on-rails - webistrano 的替代品?

Ruby - 数据库的日期时间

php - 通过 curl 和 preg_match 问题获取域到期日期/注册日期

mysql - 在 mysql 中再次匹配长字符串(完整邮政编码)和短字符串(邮政编码开头)

ruby - 让 rspec 在 RubyMine 中工作

ruby-on-rails - Rails 中模型的默认命名空间

php - 用于检测连续数字的正则表达式 - 不适用于非英语输入

IP 的 Python 日志解析

包含字母和数字以及可能的下划线和破折号的任何字符串的正则表达式代码