Ruby on rails 使用<;字符串>;。拆分(和正则表达式)以检查内部引号

Ruby on rails 使用<;字符串>;。拆分(和正则表达式)以检查内部引号,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我正在我的网站上进行搜索,并希望支持搜索准确的短语。我希望最终得到一系列要搜索的术语;以下是一些例子: “foobar\”你妈妈\“bar foo”=>[“foobar”,“你妈妈”,“bar”,“foo”] “ruby rails”测试课程“测试课程”asdf”=>[“ruby”、“rails”、“测试课程”、“测试课程”、“asdf”] 请注意,引号前后不一定要有空格 我不太精通正则表达式,似乎没有必要在单个字符上重复拆分它。有人能帮我吗?谢谢。“要使用此正则表达式(): 这个正则表达式匹配

我正在我的网站上进行搜索,并希望支持搜索准确的短语。我希望最终得到一系列要搜索的术语;以下是一些例子:

“foobar\”你妈妈\“bar foo”
=>
[“foobar”,“你妈妈”,“bar”,“foo”]

“ruby rails”测试课程“测试课程”asdf”
=>
[“ruby”、“rails”、“测试课程”、“测试课程”、“asdf”]

请注意,引号前后不一定要有空格


我不太精通正则表达式,似乎没有必要在单个字符上重复拆分它。有人能帮我吗?谢谢。“

要使用此正则表达式():

这个正则表达式匹配标记而不是分隔符,因此您希望使用
scan
而不是
split

[…]
构造称为字符类<代码>[^”]是“除了双引号以外的任何东西”

基本上有3种备选方案:

  • “[^”]*”
    -双引号标记(可能包括空格和单引号)
  • “[^']*”
    -单引号标记(可能包括空格和双引号)
  • [^”'\s]+
    -由除引号和空格以外的一个或多个内容组成的标记
工具书类

一小条 下面是一个Ruby实现:

s = %_foobar "your mom"bar'test course''test lesson'asdf_
puts s

puts s.scan(/"[^"]*"|'[^']*'|[^"'\s]+/)
以上打印内容():

另见

你更改了问题陈述,现在我的答案不完整。在我更新我的答案之前,你确定这一个吗?另外,你能在字符串中转义引号吗?@davidcelis:你想将它与
扫描
,而不是
拆分
。我将很快修改答案(因为你也更改了问题陈述)。很抱歉。我意识到我的第二个示例可能不够清晰。感谢您的帮助!刚刚对该正则表达式进行了一次扫描,并将其更改为
/['”[^\['“\]*['”]|[^\['“\]]+/
也允许使用单引号;据我所知,它运行得很好。@davidcelis:请查看我的最新修订版;如果我还有什么可以做的,请告诉我。另外,如果我的答案有用,请向上投票。
s = %_foobar "your mom"bar'test course''test lesson'asdf_
puts s

puts s.scan(/"[^"]*"|'[^']*'|[^"'\s]+/)
foobar "your mom"bar'test course''test lesson'asdf
foobar
"your mom"
bar
'test course'
'test lesson'
asdf