2010-07-14 9 views
0

Etant donné une chaîne de recherche "voitures 'chiens et chats' marteaux de poisson '", quelle est la meilleure regex pour capturer tous les termes de recherche. Il devrait supporter des guillemets simples et doubles. Une réponse amicale Ruby si possible.Comment analyser une chaîne de recherche entre guillemets avec regex?

+0

ce propos de l'imbrication - 'les voitures "chats 'et' chiens"'? – Anurag

+0

oui, c'est un autre cas qui doit être résolu. – Gavin

Répondre

8

En utilisant String#scan:

irb> "cars 'cats and dogs' fish 'hammers'".scan /'.+?'|".+?"|[^ ]+/ 
    => ["cars", "'cats and dogs'", "fish", "'hammers'"] 

Oh, et pour se débarrasser des guillemets autour du résultat:

irb> ["cars", "'cats and dogs'", "fish", "'hammers'"].map { |s| s.gsub /^['"]|['"]$/, '' } 
    => ["cars", "cats and dogs", "fish", "hammers"] 
+0

Cela fonctionne et je peux l'utiliser, mais j'aimerais faire le travail sans la carte. J'ai une regex qui fait presque l'affaire mais qui capture une citation supplémentaire sur des phrases entre guillemets:/("?) \ S * \ b (\ S [^ \ 1] *?) \ B \ s * \ 1/ – Gavin

+5

' s.scan (/'(.+?) '| "(. +?)" | ([^] +) /). flatten.compact' exclura les guillemets –

+0

@Wayne, cela ne fonctionne pas. supprime toutes les citations, y compris celles entourant une phrase de recherche comme 'chiens et chats' – Gavin

Questions connexes