Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 包含与左/右锚相同标记的前瞻_Ruby_Regex - Fatal编程技术网

Ruby 包含与左/右锚相同标记的前瞻

Ruby 包含与左/右锚相同标记的前瞻,ruby,regex,Ruby,Regex,得到了经典“正则表达式引用字符串”问题的一个变体。我需要挑选如下所示的字符串: “foo bar” 从这样的一根长绳子上 token-token“可能引用的令牌也可以包含空格” 每个标记都可以被引用或不被引用(使用交替组很容易处理),但有时我会引用包含文字引号的字符串(不会以任何方式转义), 唯一有用的是,这些引号两边都没有空格(因为那样会 创建分隔符)。这些令牌如下所示:“foo bar”baz“ 我最初的想法是/”(?:[^”]|“*”/,但这似乎不起作用,因为像这样的标记:“这里有一些“引

得到了经典“正则表达式引用字符串”问题的一个变体。我需要挑选如下所示的字符串:

“foo bar”

从这样的一根长绳子上

token-token“可能引用的令牌也可以包含空格”

每个标记都可以被引用或不被引用(使用交替组很容易处理),但有时我会引用包含文字引号的字符串(不会以任何方式转义), 唯一有用的是,这些引号两边都没有空格(因为那样会 创建分隔符)。这些令牌如下所示:
“foo bar”baz“

我最初的想法是
/”(?:[^”]|“*”/
,但这似乎不起作用,因为像这样的标记:
“这里有一些“引号”
被一分为二

我该怎么做?平台是Ruby 2.1

请使用:

"(?:[^"]|"\w)+"

您可以在中使用示例字符串

解释

  • 与期初报价匹配
  • 非捕获组
    (?:start[^”]|“\w)
  • 一个
    [^”]
    非引号字符,或
    |
  • 一个引号和一个单词字符
    “\w
  • +
    一次或多次
  • 结束报价
进一步完善

如果要允许在其他上下文中使用引号,例如转义引号,只需将它们添加到替换中:

"(?:\\"|[^"]|"\w)+"
要允许引号后面不仅跟一个单词char,还跟任何非空格,请执行以下操作:

"(?:\\"|[^"]|"\S)+"

这一款也可能适合您的需要:

“*?”(?!\S)


要匹配非报价代币,请执行以下操作:

“*?”(?!\S)|\S+


用哪种语言?换句话说,允许使用lookbehind吗?Ruby 2.1但是如果它也能在1.9.3上运行,那就太好了。我个人不会对它使用lookbehind-
“(?:[^”]|“\S)+”
应该这样做。@NiettheDarkAbsol当我在写解释时删除了lookbehind,我看到了你的评论。同意,无需。:)FYI添加了一些可能的改进选项,例如转义报价。几乎,而且非常流畅。对我来说,它使用非空格类而不是word类:
“(?:[^”]|“(?=[^\s]))+”
,因为我还有
有时在引号旁边。不,这些文件不是我写的:-)无空格是我考虑过的一个选项,我给你
\w
作为起点。我们不需要前瞻,您发送的内容可以简化为
“(?:[^”]|“\S)+”
将在
\w
答案下方添加该选项:)
"(?:\\"|[^"]|"\S)+"