J'ai du mal à obtenir une regexp (en rubis) qui fournira le suivant je veux correspondre à tous les caractères jusqu'à la première virgule d'une chaîne. S'il n'y a pas de virgule, je veux que la chaîne entière soit appariée. Mon meilleur effort jusqu'à présent est P> "one, two" -> "one"
"one, two, three" -> "one, two"
"one two three" -> "one two three"
4 Réponses :
Que diriez-vous de /.*? (? =, | $) / code> de cette façon de se lit à la fin ou à une virgule. P>
Mais s'il fait /.*? (? =,)? / Code>, ne correspondrait pas à la chaîne vide?
assortir uniquement des non-virgules du début du début? E.G.:
/^[^,]+/
J'ai eu une idée similaire. Je pense que vous avez besoin de parens pour la capture, mais je peux voler votre ancre de départ.
@Telemachus, vous n'avez pas besoin de parents pour que l'ensemble du regex correspond à la chaîne requise.
@Telemachus, dépend de la façon dont vous l'utilisez, E.G.: String.Match (/.../) retournerait tout ce qui correspond à la regex ou à la nil si rien ne correspondait, aucune capture n'est nécessaire. EDIT: Ce que c'est dit.
@Larsh Peut-être que je suis confus, mais sans les parens, 1 $ code> n'est pas défini (si la regex correspond à la chaîne entière ou à une sous-chaîne).
@pbaumann Assez assez - je vois maintenant qu'il n'utilisait pas nécessairement = ~ code>.
Je me demande si cela ne peut pas être plus simple:
Essayez (. *?), Code> pour trouver juste dans la ligne actuelle
Est-ce que avez-vous em> être une regex? Une autre solution:
Il ne faut pas être - mais je veux 'il faut
Curieuse. Pourquoi voulez-vous que ce soit une regex? Y a-t-il un avantage?
@brad pour ce que ça vaut la peine, vous ne devriez pas avoir l'habitude de penser que tous les problèmes de chaîne nécessitent des regextes. Vous pouvez gérer de nombreux cas d'une autre manière.
J'utiliserais 'text'.split (' ", '). Premier code> qui évite entièrement une regex. :-)