使用PHP从字符串获取数字

时间:2023-02-05 19:40:08

I have strings:

我有字符串:

$one = 'foo bar 4 baz (5 qux quux)';
$two = 'bar baz 2 bar';
$three =  'qux bar 12 quux (3 foo)';
$four = 'foo baz 3 bar (13 quux foo)';

How can I find the numeric digits in these strings?

如何找到这些字符串中的数字数字?

Maybe with function:

也许与功能:

function numbers($string){

    // ???

    $first = ?;
    $second = ?;
}

For example:

例如:

function numbers($one){

    // ???

    $first = 4;
    $second = 5;
}

function numbers($two){

    // ???

    $first = 2;
    $second = NULL;
}

Best way for this maybe is regex, but how can I use this for my example? Maybe without regex?

最好的方法可能是regex,但是我如何在我的示例中使用它呢?也许没有正则表达式?

3 个解决方案

#1


25  

You can use regular expressions for this. The \d escape sequence will match all digits in the subject string.

你可以用正则表达式来表示。\d转义序列将匹配主题字符串中的所有数字。

For example:

例如:

<?php

function get_numerics ($str) {
    preg_match_all('/\d+/', $str, $matches);
    return $matches[0];
}

$one = 'foo bar 4 baz (5 qux quux)';
$two = 'bar baz 2 bar';
$three = 'qux bar 12 quux (3 foo)';
$four = 'foo baz 3 bar (13 quux foo)';

print_r(get_numerics($one));
print_r(get_numerics($two));
print_r(get_numerics($three));
print_r(get_numerics($four));

https://3v4l.org/DiDBL

https://3v4l.org/DiDBL

#2


6  

You can do:

你能做什么:

$str = 'string that contains numbers';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);

#3


5  

Here's my attempt WITHOUT a regular expression

这是我没有正则表达式的尝试

function getNumbers($str) {
    $result = array();

    // Check each character.
    for($i = 0, $len = strlen($str); $i < $len; $i++) {
        if(is_numeric($str[$i])) {
            $result[] = $str[$i];
        }
    }

    return $result;
}

$one = 'one two 4 three (5 four five)';
$two = 'one two 2 three';
$three =  'one two 12 three (3 four)';
$four = 'one two 3 three (13 four five)';

var_dump(getNumbers($one));
var_dump(getNumbers($two));
var_dump(getNumbers($three));
var_dump(getNumbers($four));

// Output:

/ /输出:

array(2) {
  [0]=>
  string(1) "4"
  [1]=>
  string(1) "5"
}

array(1) {
  [0]=>
  string(1) "2"
}

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

array(3) {
  [0]=>
  string(1) "3"
  [1]=>
  string(1) "1"
  [2]=>
  string(1) "3"
}

#1


25  

You can use regular expressions for this. The \d escape sequence will match all digits in the subject string.

你可以用正则表达式来表示。\d转义序列将匹配主题字符串中的所有数字。

For example:

例如:

<?php

function get_numerics ($str) {
    preg_match_all('/\d+/', $str, $matches);
    return $matches[0];
}

$one = 'foo bar 4 baz (5 qux quux)';
$two = 'bar baz 2 bar';
$three = 'qux bar 12 quux (3 foo)';
$four = 'foo baz 3 bar (13 quux foo)';

print_r(get_numerics($one));
print_r(get_numerics($two));
print_r(get_numerics($three));
print_r(get_numerics($four));

https://3v4l.org/DiDBL

https://3v4l.org/DiDBL

#2


6  

You can do:

你能做什么:

$str = 'string that contains numbers';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);

#3


5  

Here's my attempt WITHOUT a regular expression

这是我没有正则表达式的尝试

function getNumbers($str) {
    $result = array();

    // Check each character.
    for($i = 0, $len = strlen($str); $i < $len; $i++) {
        if(is_numeric($str[$i])) {
            $result[] = $str[$i];
        }
    }

    return $result;
}

$one = 'one two 4 three (5 four five)';
$two = 'one two 2 three';
$three =  'one two 12 three (3 four)';
$four = 'one two 3 three (13 four five)';

var_dump(getNumbers($one));
var_dump(getNumbers($two));
var_dump(getNumbers($three));
var_dump(getNumbers($four));

// Output:

/ /输出:

array(2) {
  [0]=>
  string(1) "4"
  [1]=>
  string(1) "5"
}

array(1) {
  [0]=>
  string(1) "2"
}

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

array(3) {
  [0]=>
  string(1) "3"
  [1]=>
  string(1) "1"
  [2]=>
  string(1) "3"
}