2010-11-24 15 views
0

Je veux extraire les sous-chaînes de l'intérieur d'une chaîne. Voici un exemple:Comment analyser une chaîne entre guillemets dans une autre chaîne?

string = 'aaaa' + string_var_x + 'bbbb' + string_var_y 

La sortie après l'analyse syntaxique doit être:

["'aaaa'", "'bbbb'"] 

La solution initiale était de string.scan /'\w'/ qui est presque correct.

Encore je ne peux pas le faire fonctionner sur une chaîne plus complexe, car il est implicite qu'à l'intérieur '...' il peut y avoir n'importe quel type de caractères (y compris les nombres, et [email protected]#$%^&*() peu importe).

Des idées?

Je me demande s'il y a un moyen de faire fonctionner /'.*'/, mais le rendre moins gourmand?

+0

@ la réponse d'elusive le fera. Notez l'utilisation de '?' Après le '*'? C'est comme ça que ça ne soit pas gourmand. –

Répondre

5

Lazy devrait résoudre ce problème:

/'.*?'/ 

Une autre possibilité est d'utiliser ceci:

/'[^']*'/ 
+0

Bonne réponse, merci! – gmile

0

Une autre façon de le faire est la suivante:

>> %{string = 'aaaa' + string_var_x + 'bbbb' + string_var_y}.scan(/'[^'].+?'/) 
#=> ["'aaaa'", "'bbbb'"] 

String.scan n'a été oublié beaucoup .

+0

que voulez-vous dire _overlooked_? – gmile

+1

Les gens ne remarquent même pas qu'il est disponible, c'est ce que je veux dire. Y a-t-il un autre sens? –