Como posso extrair todos os valores inteiros de corda usando um regex?

votos
3

Eu estou tentando aprender regex. Tenho a string:

$x = 5ft2inches;

Como posso ler [5,2] em uma matriz usando um regex?

Publicado 27/08/2009 em 01:03
fonte usuário
Em outras línguas...                            


8 respostas

votos
5

Se você está assumindo que a corda vai ser da forma "{number} pés {number} polegadas", então você pode usar preg_match () :

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

(\d+)irá coincidir com uma seqüência de um ou mais dígitos. Os parênteses irá dizer preg_match()para colocar os números combinados para a $matchesvariável (o terceiro argumento para a função). A função retornará 1 se ele fez uma partida, de 0 se ele não o fez.

Aqui está o que $matchesparece depois de um casamento bem-sucedido:

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

Todo o texto correspondente é o primeiro elemento, então as correspondências entre parênteses seguir. Então, para fazer sua matriz desejada:

$array = array($matches[1], $matches[2]);
Respondeu 27/08/2009 em 01:18
fonte usuário

votos
2

Assumindo PHP, qualquer razão que ninguém sugeriu divisão?

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
Respondeu 27/08/2009 em 01:24
fonte usuário

votos
2

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

Saída:

$ VAR1 = {
          'Pés' => '5',
          'Polegadas' => '2'
        };

Ou, usando split:

@height{qw(feet inches)} = split /ft|inches/, $x;
Respondeu 27/08/2009 em 01:15
fonte usuário

votos
1

Com expressões regulares, você pode extrair os dados de uma forma sem contexto, ou uma maneira contextful.

IE, se você combinar para quaisquer dígitos: (\d+)( NB: Assume que suas honras linguagem \ d como o atalho para 'quaisquer dígitos' )

Você pode então extrair cada grupo, mas você pode não saber que sua seqüência foi realmente "5 2inches" em vez de "6ft2inches" OU "29Cabbages1Fish4Cows".

Se você adicionar contexto: (\d+)ft(\d+)inches

Você sabe de certeza que você extraído (Porque caso contrário você não teria uma partida) e pode se referir a um grupo por vez para obter os pés e polegadas.

Se você não está sempre vai ter um par de números para extrair, você vai precisar para fazer os vários componentes opcionais. Confira Esta Cheat Sheet Expressões Regulares (Suas outras folhas de fraude são bacana também) para mais informações,

Respondeu 27/08/2009 em 01:19
fonte usuário

votos
1

A expressão regular é simplesmente /[0-9]+/mas como obtê-lo em uma matriz depende inteiramente de qual linguagem de programação você está usando.

Respondeu 27/08/2009 em 01:06
fonte usuário

votos
0
use `/[\d]/`
Respondeu 27/08/2009 em 01:21
fonte usuário

votos
0

Tem que tomar cuidado para números de dois dígitos.

/ \ D {1,2} /

pode funcionar um pouco melhor para pés e polegadas. O valor máximo de '2' deve ser aumentado para o que for apropriado.

Respondeu 27/08/2009 em 01:21
fonte usuário

votos
0

Você não menciona o idioma que você está usando, então aqui está a solução geral: Você não "extrair" os números, você substituir tudo, exceto números com uma cadeia vazia.

Em C #, este seria semelhante

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
Respondeu 27/08/2009 em 01:11
fonte usuário

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