Jak mohu získat všechny celočíselné hodnoty z řetězce pomocí regulárních výrazů?

hlasů
3

Snažím se naučit regulární výraz. Mám řetězec:

$x = 5ft2inches;

Jak si mohu přečíst [5,2] do pole pomocí regex?

Položena 27/08/2009 v 01:03
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
5

Pokud jste za předpokladu, že řetězec bude mít formu „: {číslo} ft {číslo} palce“, pak můžete použít preg_match () :

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

(\d+)bude odpovídat řetězec jednoho nebo více číslic. Závorky řeknou preg_match()umístit spárované čísla do $matchesproměnné (třetí argument funkce). Funkce vrátí hodnotu 1, pokud to dělalo shodu, 0 pokud ne.

Zde je to, co $matchesvypadá jako po úspěšném zápase:

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

Celý uzavřeno řetězec je první prvek, pak závorkách zápasy sledovat. Tak, aby se požadované pole:

$array = array($matches[1], $matches[2]);
Odpovězeno 27/08/2009 v 01:18
zdroj uživatelem

hlasů
2

Za předpokladu, PHP, žádný důvod, proč nikdo navrhované rozdělení?

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
Odpovězeno 27/08/2009 v 01:24
zdroj uživatelem

hlasů
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;

Výstup:

$ VAR1 = {
          'Stop' => '5',
          'Palce' => '2'
        };

Nebo pomocí split:

@height{qw(feet inches)} = split /ft|inches/, $x;
Odpovězeno 27/08/2009 v 01:15
zdroj uživatelem

hlasů
1

S regulárními výrazy, můžete buď extrahovat data do bezkontextovém způsobem, nebo contextful způsobem.

IE, pokud jste zápas za žádných číslicemi (\d+)( NB: předpokládá, že vaše jazykové vyznamenání \ d jako zkratka pro ‚jakékoliv číslice‘ )

Pak můžete extrahovat každé skupiny, ale možná nevíte, že vaše řetězec byl vlastně „5 2 palce“ namísto „6ft2inches“ nebo „29Cabbages1Fish4Cows“.

Přidáte-li kontext: (\d+)ft(\d+)inches

Víte , zda to, co jste se extrahuje (Protože jinak byste nedostali zápas) a může odkazovat na každou skupinu zase získat stopy a palce.

Pokud ne vždy budeme mít pár čísel extrahovat, budete muset provést různé složky nepovinné. Podívejte se na tento regulární výraz Cheat Sheet (Jeho další taháky jsou šikovný taky) pro více informací,

Odpovězeno 27/08/2009 v 01:19
zdroj uživatelem

hlasů
1

Regulární výraz je jednoduše /[0-9]+/, ale, jak se dostat do pole zcela závisí na tom, co programovací jazyk, který používáte.

Odpovězeno 27/08/2009 v 01:06
zdroj uživatelem

hlasů
0
use `/[\d]/`
Odpovězeno 27/08/2009 v 01:21
zdroj uživatelem

hlasů
0

Muset dávat pozor na čísla dvojité číslice.

/ \ D {1,2} /

by mohlo fungovat trochu lépe pro stopy a palce. Maximální hodnota ‚2‘ by měl být zvýšil na to, co je vhodné.

Odpovězeno 27/08/2009 v 01:21
zdroj uživatelem

hlasů
0

Ty nezmiňují jazyk, který používáte, takže tady je obecné řešení: Nemáte „extrahovat“ čísla, nahradit všechno kromě čísel s prázdným řetězcem.

V jazyce C #, to bude vypadat

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
Odpovězeno 27/08/2009 v 01:11
zdroj uživatelem

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