0

次のようにPHPの文字列から数字を抽出したい:

文字列 = 'make1to6' の場合、文字列全体の 'to' 部分文字列の前後にある数字を抽出したいと思います。つまり、1 と 6 が抽出されます。

これらの戻り値をいくつかの計算に使用します。文字列全体の「to」部分文字列の前後の数字を抽出したいと思います。つまり、1 と 6 が抽出されます。

文字列の長さは固定されておらず、最大 10 文字の長さです。数字は、文字列の「to」の両側に最大 2 桁までです。

文字列値の例:

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
<?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 に答える
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 に答える