PHP извлечь числа из строки - PullRequest
0 голосов
/ 03 декабря 2011

Я хочу извлечь числа из строки в PHP следующим образом:

если string = 'make1to6' , я бы хотел извлечь числовой символ до и после подстроки 'to' во всей строке. т.е. 1 и 6 должны быть извлечены

Я буду использовать эти возвращаемые значения для некоторых вычислений. ' Я хотел бы извлечь числовой символ до и после подстроки 'to' во всей строке. т.е. 1 и 6 должны быть извлечены

Длина строки не фиксирована и может быть не более 10 символов в длину. Число может содержать не более двух цифр по обе стороны от «до» в строке.

Некоторые примеры значений строк:

sure1to3
ic3to9ltd
anna1to6
joy1to4val
make6to12
ext12to36

думает о чем-то вроде:

function beforeTo(string) {

    return numeric_value_before_'to'_in_the_string;

}


function afterTo(string) {

    return numeric_value_after_'to'_in_the_string;

}

Я буду использовать эти возвращаемые значения для некоторых вычислений.

Ответы [ 8 ]

1 голос
/ 03 декабря 2011

Вы можете использовать preg_match_all для достижения этой цели:

function getNumbersFromString($str) {
    $matches = array();
    preg_match_all("/([0-9]+)/",$str,$matches);
    return $matches;
}
$matches = getNumbersFromString("hej 12jippi77");
0 голосов
/ 04 декабря 2011
<?php
list($before, $after) = explode('to', 'sure1to3');

$before_to = extract_ints($before);
$after_to  = extract_ints($after);

function extract_ints($string) {
    $ints = array();
    $len = strlen($string);

    for($i=0; $i < $len; $i++) {
        $char = $string{$i};
        if(is_numeric($char)) {
            $ints[] = intval($char);
        }
    }

    return $ints;
}
?>

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

0 голосов
/ 03 декабря 2011

Используйте preg_match с регулярным выражением, которое будет извлекать числа для вас.Что-то вроде этого должно помочь вам:

$matches = null;
$returnValue = preg_match('/([\d+])to([\d+])/uis', 'ic3to9ltd', $matches);

После этого $matches будет выглядеть следующим образом:

array (
  0 => '3to9',
  1 => '3',
  2 => '9',
);

Вы должны немного прочитать о регулярных выражениях, это не сложнотакие вещи, если вы знаете, как они работают.Сделает вашу жизнь проще; -)

0 голосов
/ 03 декабря 2011

Вы можете использовать регулярное выражение как таковое, оно должно точно соответствовать вашей спецификации:

$string = 'make6to12';
preg_match('{^.*?(?P<before>\d{1,2})to(?P<after>\d{1,2})}m', $string, $match);
echo $match['before'].', '.$match['after']; // 6, 12
0 голосов
/ 03 декабря 2011

Это то, для чего нужны регулярные выражения - вы можете сопоставить несколько экземпляров очень специфических шаблонов и вернуть их вам в массиве.Это довольно круто, по правде говоря:)

Посмотрите здесь, как использовать встроенные методы регулярных выражений в php: LINK

А вот фантастическийинструмент для проверки регулярных выражений: LINK

0 голосов
/ 03 декабря 2011
<?php

$data = <<<EOF

sure1to3
ic3to9ltd
anna1to6
joy1to4val
make6to12
ext12to36

EOF;

preg_match_all('@(\d+)to(\d+)@s', $data, $matches);
header('Content-Type: text/plain');

//print_r($matches);
foreach($matches as $match)
{
    echo sprintf("%d, %d\n", $match[1], $match[2]);
}

?>
0 голосов
/ 03 декабря 2011

Вы можете использовать регулярные выражения.

$string = 'make1to6';
if (preg_match('/(\d{1,10})to(\d{1,10})/', $string, $matches)) {
    $number1 = (int) $matches[1];
    $number2 = (int) $matches[2];
} else {
    // Not found...
}
0 голосов
/ 03 декабря 2011

Вы можете использовать это:

// $str holds the string in question
if (preg_match('/(\d+)to(\d+)/', $str, $matches)) {
    $number1 = $matches[1];
    $number2 = $matches[2];
}
...