从字符串中提取数字

时间:2012-10-01 15:31:38

标签: php regex

  

可能重复:
  Extract numbers from a string

我正在使用preg_match()从字符串中提取数字。
示例字符串是:advent_id ----------- 3163 (1 row),我需要提取数字后跟连字符而不是行数。为它编写正则表达式的正确方法是什么? 我尝试了preg_match('/^advent_id\s------------\s(.*)\s\(/', $cn, $matches);,其中$cn有源字符串,但它不起作用。请注意,该数字可以包含任意数字。

4 个答案:

答案 0 :(得分:2)

只需提取行中的第一个整数。

$x = 'advent_id ----------- 3163 (1 row)';
preg_match('/\d+/', $x, $m);
echo "$m[0]\n";

产地:

3163

修改

如您所见,preg_match()的默认行为是匹配第一个匹配项,然后停止。它与preg_match_all()

不同

答案 1 :(得分:0)

代码:

$s = 'advent_id ----------- 3163 (1 row)';
preg_match('~-+ (\d+)~', $s, $m);
print_r($m);

将输出:

Array
(
    [0] => ----------- 3163
    [1] => 3163
)

答案 2 :(得分:0)

你很亲密。你的主要问题是你的.*匹配任何角色,所以你必须使你的正则表达式变得复杂,以确保它只是抓取数字。通过将该部分更改为[0-9]*,它只会匹配数字并使您的正则表达式更简单。

$cn = 'advent_id ----------- 3163 (1 row)';
preg_match('/^advent_id -* ([0-9]*)/', $cn, $matches);
print_r($matches[1]);

答案 3 :(得分:0)

你可以尝试

$string = "advent_id ----------- 3163 (1 row)" ;
$matches = array();
preg_match('/\d+/', $string, $matches);
print($matches[0]);

输出

 3163