2009-10-03 12 views
0

J'écris un petit programme pour faire quelques calculs.Besoin d'une expression régulière pour cette chaîne

Fondamentalement, l'entrée est la suivante:

-91 10 -4 5 

Les chiffres peuvent avoir le signe négatif ou non. Ils sont également séparés par un espace. J'ai besoin d'une expression régulière pour filtrer chaque chiffre, y compris le signe s'il y en a un.

Merci!

Adam

+0

Quelle langue utilisez-vous? – Graviton

+0

Jetez un oeil à http://www.txt2re.com/ il devrait aider avec beaucoup de ce genre de problème. – RCIX

Répondre

4

en PHP:

$digit=explode(' ', $digitstring); 
echo $digit[0]; // return -91 

vous n'avez pas besoin d'un regex pour cela, en PHP.

Il existe également une bibliothèque similaire dans un autre langage, tel que .Net.

string.split(new char[]{' '}); 

Voici un exemple en rubis:

@[email protected](' ') 
@[email protected][0]; //-91 
+0

toutes ses autres questions sont à propos de ruby ​​... donc je devine qu'il veut ruby ​​ – jrhicks

+0

vous les gars sont impressionnants xD. Oui je suis en effet en train d'écrire en Ruby et la fonction split fonctionne super bien !! Merci! – b1gtuna

1
(-?\d+)\s? 

Vous devez faire correspondre n fois et obtenir le premier groupe de votre matcher.

Code Pseudo:

matcher = "-91 10 -4 5".match(/(-\d+)\s?/) 
while(matcher.hasMatch()) aNumber = match.group(1); 

Il est plus facile sans regex:

for(x : "-91 10 -4 5".split()) parseInt(x); 
1

Vous voulez probablement:

(?<=\b)-?\d+(?=\b) 

Cela signifie:

  • Faire correspondre (mais ne pas capturer) une limite de mot (espace ou début de chaîne dans ce cas);
  • Possibilité de faire correspondre et capturer le tiret;
  • Faire correspondre et capturer un ou plusieurs chiffres;
  • Correspondance mais ne capture pas une limite de mot final (étant un espace ou la fin de la chaîne dans ce cas).

Les expressions non-capturées ci-dessus sont zero-width assertions, techniquement un lookbehind positif et un lookahead positif (respectivement).

Questions connexes