Comment puis-je extraire toutes les valeurs entières de chaîne en utilisant une expression régulière?

voix
3

Je suis en train d'apprendre regex. J'ai la chaîne:

$x = 5ft2inches;

Comment puis-je lire [5,2] dans un tableau en utilisant une expression régulière?

Créé 27/08/2009 à 01:03
source utilisateur
Dans d'autres langues...                            


8 réponses

voix
1

L'expression régulière est tout simplement /[0-9]+/mais comment l'obtenir dans un tableau dépend entièrement de ce langage de programmation que vous utilisez.

Créé 27/08/2009 à 01:06
source utilisateur

voix
0

Vous ne mentionnez pas la langue que vous utilisez, voici donc la solution générale: Vous ne « extrait » les chiffres, vous remplacez tout sauf les numéros avec une chaîne vide.

En C #, cela ressemblerait

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
Créé 27/08/2009 à 01:11
source utilisateur

voix
2

En Perl:

#!/usr/bin/perl

use strict;
use warnings;

my $x = "5ft2inches";
my %height;
@height{qw(feet inches)} = ($x =~ /^([0-9]+)ft([0-9]+)inches$/);

use Data::Dumper;
print Dumper \%height;

Sortie:

$ VAR1 = {
          'Pieds' => '5',
          'Pouces' => '2'
        };

Ou, en utilisant split:

@height{qw(feet inches)} = split /ft|inches/, $x;
Créé 27/08/2009 à 01:15
source utilisateur

voix
5

Si vous assumez que la chaîne sera de la forme « {nombre} ft {nombre} pouces » vous pouvez utiliser preg_match () :

preg_match('/(\d+)ft(\d+)inches/', $string, $matches);

(\d+)correspondra à une chaîne d'un ou plusieurs chiffres. Les parenthèses raconteront preg_match()à placer les nombres appariés dans la $matchesvariable (le troisième argument à la fonction). La fonction retourne 1 si elle a fait un match, de 0 si elle ne l'a pas.

Voici ce qui $matchesressemble après un match réussi:

Array
(
    [0] => 5ft2inches
    [1] => 5
    [2] => 2
)

La chaîne entière correspondance est le premier élément, puis les matchs suivent parenthésées. Donc, pour faire votre choix désiré:

$array = array($matches[1], $matches[2]);
Créé 27/08/2009 à 01:18
source utilisateur

voix
1

Avec les expressions régulières, vous pouvez extraire vos données d'une manière contextless, ou d'une manière contextful.

IE, si vous correspondez pour les chiffres: (\d+)( NB: On suppose que vos honneurs linguistiques \ d comme raccourci pour « les chiffres » )

Vous pouvez ensuite extraire chaque groupe, mais vous savez peut - être pas que votre chaîne était en fait « 5 2inches » au lieu de « 6ft2inches » OR « 29Cabbages1Fish4Cows ».

Si vous ajoutez le contexte: (\d+)ft(\d+)inches

Vous savez que ce que vous avez extrait (parce que sinon vous auriez pas eu un match) et peut se référer à chaque groupe à son tour pour obtenir les pieds et pouces.

Si vous allez pas toujours avoir une paire de chiffres pour extraire, vous aurez besoin de faire les différents composants en option. Consultez Cette fiche d'expression régulière Cheat (Ses autres feuilles de triche sont trop chouette) pour plus d' informations,

Créé 27/08/2009 à 01:19
source utilisateur

voix
0

Se méfier des numéros à deux chiffres.

/ \ D {1,2} /

pourrait travailler un peu mieux pour les pieds et pouces. La valeur maximale de « 2 » doit être fait monter à tout ce qui est approprié.

Créé 27/08/2009 à 01:21
source utilisateur

voix
0
use `/[\d]/`
Créé 27/08/2009 à 01:21
source utilisateur

voix
2

En supposant que PHP, aucune raison ne l'a suggéré scission?

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
Créé 27/08/2009 à 01:24
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more