得到了经典"正则表达式引用字符串的变体"问题。我需要选择看起来像这样的字符串:
"foo bar bar"
来自像这样的长字符串
token token "maybe quoted token that can also contain spaces"
每个令牌都可以引用或不引用(这很容易使用交替的组)但有时我引用了字符串,其中包含字面引号(不以任何方式转义),
唯一可行的事情是那些引号从来没有任何一方的空格(因为那样
创建一个分隔符)。这些令牌看起来像这样:"foo-bar"baz"
我最初的想法是/"(?:[^"]|" )*"/
,但这似乎不起作用,因为像这样的令牌:"here is some"quotes"
被分成两部分。
我该怎么做?平台是Ruby 2.1
答案 0 :(得分:2)
使用此:
"(?:[^"]|"\w)+"
或
"(?:[^"]|"\S)+"
您可以在the regex demo中播放示例字符串。
<强>解释强>
"
与开头报价(?:start [^"]|"\w)
匹配... [^"]
非引号字符,或|
"\w
+
一次或多次"
收盘报价进一步优化
如果您想在其他上下文中允许引号,例如转义引号,只需将它们添加到交替中:
"(?:\\"|[^"]|"\w)+"
允许不仅使用单词char而且使用任何非空格来引用引号:
"(?:\\"|[^"]|"\S)+"
答案 1 :(得分:1)