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)+"