Ruby String divisé avec regex
C'est Ruby 1.8.7 mais doit être la même que pour la 1.9.x
Je suis en train de découper une chaîne par exemple:
a = "foo.bar.size.split('.').last"
# trying to split into ["foo", "bar","split('.')","last"]
Fondamentalement, le fractionnement des commandes qu'il représente, je suis en train de le faire avec des Regexp mais vous ne savez pas comment, l'idée était d'utiliser les regexp
a.split(/[a-z\(\)](\.)[a-z\(\)]/)
Ici pour essayer de groupe (\.)
à split avec, mais cela ne semble pas être la bonne approche.
source d'informationauteur Haris Krajina
Vous devez vous connecter pour publier un commentaire.
Je pense que ce serait-il le faire:
Je ne sais pas combien vous en savez sur les regex, mais le
(?=[\w])
est une anticipation qui dit que "seul match à la dot si le caractère suivant est une lettre type de personnage". Une antémémoire ne sera pas réellement saisir le texte qu'elle correspond. C'est juste "look". Ainsi, le résultat est exactement ce que vous cherchez:J'ai peur que les expressions régulières ne vous prendra pas très loin. Considérez par exemple les expressions suivantes (qui sont également valables Ruby)
Le problème, c'est que la liste des appels est en fait un arbre d'appels. La solution la plus simple dans la vue est probablement d'utiliser un Rubis et l'analyseur de transformer l'arbre d'analyse en fonction de vos besoins (dans cet exemple, nous sommes la descente récursive dans l'arbre d'appel, la collecte des appels dans une liste):
Et de montrer l'arbre d'analyse de n'importe quelle entrée:
Vous êtes à la recherche pour l'Anticipation et les assertions arrières.
http://www.regular-expressions.info/lookaround.html
ici je n'ai pas de ruby env. J'ai essayé avec python re.split().
l'expression régulière ci-dessus a d'anticipation négatif ET lookbehind, assurez-vous que le "point" de entre guillemets simples ne fonctionnent pas comme séparateur.
bien sûr, pour l'exemple donné par vous, l'un des lookbehind ou d'anticipation n'est suffisante. vous pouvez choisir la bonne voie pour votre condition.