Hoe kan ik pak alle gehele waarden van string met behulp van een reguliere expressie?

stemmen
3

Ik ben op zoek naar reguliere expressies te leren. Ik heb de string:

$x = 5ft2inches;

Hoe kan ik lezen [5,2] in een array met behulp van een reguliere expressie?

De vraag is gesteld op 27/08/2009 om 01:03
bron van user
In andere talen...                            


8 antwoorden

stemmen
5

Als u in de veronderstelling dat de string in de vorm "{nummer} ft {nummer} inches" dan kunt u gebruik zal zijn preg_match () :

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

(\d+)zal een reeks van één of meer cijfers overeenkomen. De haakjes zal vertellen preg_match()aan de aangepaste cijfers te plaatsen in de $matchesvariabele (het derde argument voor de functie). De functie zal terugkeren 1 als het een match made, van 0 als het niet deed.

Hier is wat $matcheseruit ziet na een succesvolle match:

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

De gehele aangepaste string is het eerste element, dan is de haakjes wedstrijden te volgen. Dus om de gewenste reeks te maken:

$array = array($matches[1], $matches[2]);
antwoordde op 27/08/2009 om 01:18
bron van user

stemmen
2

Ervan uitgaande dat PHP, welke reden dan ook niemand heeft split gesuggereerd?

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
antwoordde op 27/08/2009 om 01:24
bron van user

stemmen
2

In 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;

Output:

$ VAR1 = {
          'Feet' => '5',
          'Inch' => '2'
        };

Of via split:

@height{qw(feet inches)} = split /ft|inches/, $x;
antwoordde op 27/08/2009 om 01:15
bron van user

stemmen
1

Met reguliere expressies, kunt u het uitpakken van uw gegevens in een contextless manier, of een contextful manier.

IE, als je match voor elke cijfers: (\d+)( NB: gaat ervan uit dat je taal eert \ d als de snelkoppeling voor 'alle cijfers' )

U kunt dan uitpakken elke groep, maar u misschien niet weet dat de string was eigenlijk "5 2inches" in plaats van "6ft2inches" OR "29Cabbages1Fish4Cows".

Als u context toe te voegen: (\d+)ft(\d+)inches

Je weet zeker wat je hebt gewonnen (Want anders zou je niet een match te krijgen) en kan verwijzen naar elke groep op zijn beurt aan de voeten en inches te krijgen.

Als je niet altijd gaat om een paar nummers te extraheren hebben, moet u de verschillende onderdelen optioneel te maken. Check out met deze reguliere expressie Cheat Sheet (Zijn andere spiekbriefjes te nifty) voor meer info,

antwoordde op 27/08/2009 om 01:19
bron van user

stemmen
1

De reguliere expressie is gewoon /[0-9]+/maar hoe om het te krijgen in een array hangt volledig af van wat programmeertaal je gebruikt.

antwoordde op 27/08/2009 om 01:06
bron van user

stemmen
0
use `/[\d]/`
antwoordde op 27/08/2009 om 01:21
bron van user

stemmen
0

Moeten oppassen voor dubbele cijfers.

/ \ D {1,2} /

misschien een beetje beter voor de voeten en inches werken. De maximum waarde van '2' moet worden verhoogd naar wat geschikt is.

antwoordde op 27/08/2009 om 01:21
bron van user

stemmen
0

Je hoeft niet de taal die u gebruikt noemen, dus hier is de algemene oplossing: U hoeft niet "uitpakken" de nummers, je alles vervangen behalve nummers met een lege string.

In C #, zou dit eruit

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
antwoordde op 27/08/2009 om 01:11
bron van user

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