Как я могу извлечь все целые значения из строки с помощью регулярных выражений?

голоса
3

Я пытаюсь узнать регулярное выражение. У меня есть строка:

$x = 5ft2inches;

Как я могу прочитать [5,2] в массив с помощью регулярного выражения?

Задан 27/08/2009 в 01:03
источник пользователем
На других языках...                            


8 ответов

голоса
5

Если предполагается , что строка будет иметь вид «{число} футов {число} дюймов» , то вы можете использовать preg_match () :

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

(\d+)будет соответствовать строке одной или более цифр. Скобки покажет preg_match()разместить совпавшие цифры в $matchesпеременной (третий аргумент функции). Функция возвращает 1 , если он сделал матч, 0 , если это не так.

Вот то , что $matchesвыглядит как после успешного матча:

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

Вся строка соответствуют является первым элементом, то Скобки матчей следуют. Таким образом, чтобы сделать нужный массив:

$array = array($matches[1], $matches[2]);
Ответил 27/08/2009 в 01:18
источник пользователем

голоса
2

Предполагая, PHP, какой-либо причине никто не предложенный раскол?

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
Ответил 27/08/2009 в 01:24
источник пользователем

голоса
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
источник пользователем

голоса
1

С помощью регулярных выражений, вы можете извлечь данные в бесконтекстном способе, или contextful способа.

IE, если вы подходите для любых цифр: (\d+)( NB: Предполагает , что ваш язык отличие \ d в качестве ярлыка для «любых цифр» )

Затем вы можете извлечь каждую группу, но вы можете не знать , что ваша строка была на самом деле «5 2inches» вместо «6ft2inches» или «29Cabbages1Fish4Cows».

Если добавить контекст: (\d+)ft(\d+)inches

Вы знаете , для уверены , что вы извлекли (Потому что в противном случае вы не получили бы матч) и может относиться к каждой группе , в свою очередь , чтобы получить ноги и дюймов.

Если вы не всегда будете иметь пару чисел , чтобы извлечь, вам нужно сделать различные компоненты необязательны. Проверьте эту регулярное выражение Шпаргалку (Его другие шпаргалки являются изящными тоже) для получения дополнительной информации,

Ответил 27/08/2009 в 01:19
источник пользователем

голоса
1

Регулярное выражение просто , /[0-9]+/но как получить его в массив полностью зависит от того, какой язык программирования вы используете.

Ответил 27/08/2009 в 01:06
источник пользователем

голоса
0
use `/[\d]/`
Ответил 27/08/2009 в 01:21
источник пользователем

голоса
0

Придется следить за двойные числа цифры.

/ \ Д {1,2} /

может работать немного лучше для ног и дюймов. Максимальное значение «2» должно быть увеличено до все, что необходимо.

Ответил 27/08/2009 в 01:21
источник пользователем

голоса
0

Вы не говоря уже о языке, который вы используете, так что здесь есть общее решение: Вы не «извлечь» число, заменить все, кроме чисел с пустой строкой.

В C #, это будет выглядеть как

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
Ответил 27/08/2009 в 01:11
источник пользователем

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