0

我想从 PHP 中的字符串中提取数字,如下所示:

如果string = 'make1to6'我想在整个字符串中的 'to' 子字符串之前和之后提取数字字符。即要提取1和6

我将使用这些返回值进行一些计算。我想在整个字符串中的“到”子字符串之前和之后提取数字字符。即要提取1和6

字符串的长度不是固定的,最长为 10 个字符。字符串中“to”的任一侧的数字最多为两位数。

一些示例字符串值:

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;

}

我将使用这些返回值进行一些计算。

4

8 回答 8

2

你可以preg_match_all用来实现这一点:

function getNumbersFromString($str) {
    $matches = array();
    preg_match_all('/([0-9]+)/', $str, $matches);
    return $matches;
}
$matches = getNumbersFromString('hej 12jippi77');
于 2011-12-03T19:59:03.163 回答
1

将 preg_match 与将为您提取数字的正则表达式一起使用。像这样的东西应该可以为您解决问题:

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

之后$matches将如下所示:

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

您应该阅读一些关于正则表达式的内容,如果您知道它们是如何工作的,那么做这样的事情并不难。会让你的生活更轻松。;-)

于 2011-12-03T19:57:44.820 回答
0

你可以使用这个:

// $str holds the string in question
if (preg_match('/(\d+)to(\d+)/', $str, $matches)) {
    $number1 = $matches[1];
    $number2 = $matches[2];
}
于 2011-12-03T19:54:35.847 回答
0

您可以使用正则表达式。

$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...
}
于 2011-12-03T19:55:22.493 回答
0
<?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]);
}

?>
于 2011-12-03T19:55:35.933 回答
0

这就是正则表达式的用途——您可以匹配非常特定模式的多个实例,并将它们以数组的形式返回给您。真是太棒了,说实话:)

在这里看看如何在 php 中使用内置的正则表达式方法:LINK

这是一个测试正则表达式的绝妙工具:LINK

于 2011-12-03T19:55:40.493 回答
0

您可以使用正则表达式,它应该完全符合您的规范:

$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
于 2011-12-03T19:56:56.237 回答
0
<?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()一堆字符。

于 2011-12-03T20:03:31.920 回答