Πώς μπορώ να εξαγάγετε όλες τις ακέραιες τιμές από συμβολοσειράς χρησιμοποιώντας μια τυπική έκφραση;

ψήφοι
3

Προσπαθώ να μάθω regex. Έχω το string:

$x = 5ft2inches;

Πώς μπορώ να διαβάσω [5,2] σε μια σειρά, χρησιμοποιώντας μια τυπική έκφραση;

Δημοσιεύθηκε 27/08/2009 στις 01:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
1

Η κανονική έκφραση είναι απλά /[0-9]+/, αλλά πώς να το πάρει σε μια σειρά εξαρτάται εξ ολοκλήρου από το τι γλώσσα προγραμματισμού που χρησιμοποιείτε.

Απαντήθηκε 27/08/2009 στις 01:06
πηγή χρήστη

ψήφοι
0

Δεν αναφέρω τη γλώσσα που χρησιμοποιείτε, τόσο εδώ είναι η γενική λύση: Δεν «εξαγωγή» τους αριθμούς, θα αντικαταστήσει τα πάντα εκτός από αριθμούς με ένα κενό string.

Στην C #, αυτό θα μοιάζει με

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
Απαντήθηκε 27/08/2009 στις 01:11
πηγή χρήστη

ψήφοι
2

Στην 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;

Παραγωγή:

$ VAR1 = {
          'Πόδια' => '5',
          'Ιντσών' => '2'
        }?

Ή, χρησιμοποιώντας split:

@height{qw(feet inches)} = split /ft|inches/, $x;
Απαντήθηκε 27/08/2009 στις 01:15
πηγή χρήστη

ψήφοι
5

Εάν υποτεθεί ότι η συμβολοσειρά θα είναι της μορφής «{αριθμός} ft {αριθμός} ίντσες» τότε μπορείτε να χρησιμοποιήσετε preg_match () :

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

(\d+)θα ταιριάξει μια σειρά από ένα ή περισσότερα ψηφία. Οι παρενθέσεις θα πει preg_match()να τοποθετήσει τα συμφωνημένα αριθμούς στην $matchesμεταβλητή (το τρίτο επιχείρημα για τη λειτουργία). Η συνάρτηση θα επιστρέψει 1 αν έκανε έναν αγώνα, 0 αν δεν το έκανε.

Εδώ είναι τι $matchesμοιάζει μετά από μια επιτυχή αγώνα:

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

Το σύνολο συμφωνημένα string είναι το πρώτο στοιχείο, τότε οι παρένθεση αγώνες ακολουθούν. Έτσι, για να κάνουν επιθυμητή σειρά σας:

$array = array($matches[1], $matches[2]);
Απαντήθηκε 27/08/2009 στις 01:18
πηγή χρήστη

ψήφοι
1

Με Κανονικές Εκφράσεις, μπορείτε είτε να εξάγετε τα δεδομένα σας σε ένα contextless τρόπο, ή contextful τρόπο.

IE, αν ταιριάζει για κάθε ψηφία: (\d+)( Σημείωση: Υποθέτει ότι η γλώσσα τιμά σας \ d ως συντόμευση για «οποιαδήποτε ψηφία» )

Στη συνέχεια μπορείτε να εξαγάγετε κάθε ομάδα, αλλά ίσως δεν γνωρίζετε ότι εγχόρδων σας ήταν στην πραγματικότητα «5 2inches» αντί για «6ft2inches» Ή «29Cabbages1Fish4Cows».

Αν προσθέσετε πλαίσιο: (\d+)ft(\d+)inches

Ξέρετε για σίγουρος τι έχετε εξάγεται (Γιατί αλλιώς δεν θα πάρετε έναν αγώνα) και μπορεί να αναφέρεται σε κάθε ομάδα με τη σειρά της να πάρει τα πόδια και ίντσες.

Αν δεν είστε πάντα θα έχουν ένα ζευγάρι των αριθμών για την εξαγωγή, θα πρέπει να κάνουν τα διάφορα συστατικά προαιρετική. Ελέγξτε έξω αυτό το Κανονική Έκφραση εξαπατήσει Φύλλο (άλλα σκονάκια του είναι ικανό πάρα πολύ) για περισσότερες πληροφορίες,

Απαντήθηκε 27/08/2009 στις 01:19
πηγή χρήστη

ψήφοι
0

Πρέπει να προσέξετε για διπλή αριθμοί ψηφίων.

/ \ Ά {1,2} /

θα μπορούσε να λειτουργήσει λίγο καλύτερα για τα πόδια και ίντσες. Η μέγιστη τιμή του «2» θα πρέπει να ανέβασα σε ό, τι είναι κατάλληλο.

Απαντήθηκε 27/08/2009 στις 01:21
πηγή χρήστη

ψήφοι
0
use `/[\d]/`
Απαντήθηκε 27/08/2009 στις 01:21
πηγή χρήστη

ψήφοι
2

Υποθέτοντας PHP, κανένα λόγο κανείς δεν πρότεινε διάσπαση;

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
Απαντήθηκε 27/08/2009 στις 01:24
πηγή χρήστη

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