Προσπαθώ να μάθω regex. Έχω το string:
$x = 5ft2inches;
Πώς μπορώ να διαβάσω [5,2] σε μια σειρά, χρησιμοποιώντας μια τυπική έκφραση;
Προσπαθώ να μάθω regex. Έχω το string:
$x = 5ft2inches;
Πώς μπορώ να διαβάσω [5,2] σε μια σειρά, χρησιμοποιώντας μια τυπική έκφραση;
Η κανονική έκφραση είναι απλά /[0-9]+/
, αλλά πώς να το πάρει σε μια σειρά εξαρτάται εξ ολοκλήρου από το τι γλώσσα προγραμματισμού που χρησιμοποιείτε.
Δεν αναφέρω τη γλώσσα που χρησιμοποιείτε, τόσο εδώ είναι η γενική λύση: Δεν «εξαγωγή» τους αριθμούς, θα αντικαταστήσει τα πάντα εκτός από αριθμούς με ένα κενό string.
Στην C #, αυτό θα μοιάζει με
string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
Στην 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;
Εάν υποτεθεί ότι η συμβολοσειρά θα είναι της μορφής «{αριθμός} 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]);
Με Κανονικές Εκφράσεις, μπορείτε είτε να εξάγετε τα δεδομένα σας σε ένα contextless τρόπο, ή contextful τρόπο.
IE, αν ταιριάζει για κάθε ψηφία: (\d+)
( Σημείωση: Υποθέτει ότι η γλώσσα τιμά σας \ d ως συντόμευση για «οποιαδήποτε ψηφία» )
Στη συνέχεια μπορείτε να εξαγάγετε κάθε ομάδα, αλλά ίσως δεν γνωρίζετε ότι εγχόρδων σας ήταν στην πραγματικότητα «5 2inches» αντί για «6ft2inches» Ή «29Cabbages1Fish4Cows».
Αν προσθέσετε πλαίσιο: (\d+)ft(\d+)inches
Ξέρετε για σίγουρος τι έχετε εξάγεται (Γιατί αλλιώς δεν θα πάρετε έναν αγώνα) και μπορεί να αναφέρεται σε κάθε ομάδα με τη σειρά της να πάρει τα πόδια και ίντσες.
Αν δεν είστε πάντα θα έχουν ένα ζευγάρι των αριθμών για την εξαγωγή, θα πρέπει να κάνουν τα διάφορα συστατικά προαιρετική. Ελέγξτε έξω αυτό το Κανονική Έκφραση εξαπατήσει Φύλλο (άλλα σκονάκια του είναι ικανό πάρα πολύ) για περισσότερες πληροφορίες,
Πρέπει να προσέξετε για διπλή αριθμοί ψηφίων.
/ \ Ά {1,2} /
θα μπορούσε να λειτουργήσει λίγο καλύτερα για τα πόδια και ίντσες. Η μέγιστη τιμή του «2» θα πρέπει να ανέβασα σε ό, τι είναι κατάλληλο.
use `/[\d]/`
Υποθέτοντας PHP, κανένα λόγο κανείς δεν πρότεινε διάσπαση;
$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);