-1

可能重复:
从字符串中提取数字

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

4

4 回答 4

2

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

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

产生:

3163

编辑

如您所见, 的默认行为preg_match()是匹配第一次出现,然后停止。不同的是preg_match_all()

于 2012-10-01T15:41:28.963 回答
0

代码:

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

将输出:

Array
(
    [0] => ----------- 3163
    [1] => 3163
)
于 2012-10-01T15:37:39.797 回答
0

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

$cn = 'advent_id ----------- 3163 (1 row)';
preg_match('/^advent_id -* ([0-9]*)/', $cn, $matches);
print_r($matches[1]);
于 2012-10-01T15:37:41.367 回答
0

你可以试试

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

输出

 3163
于 2012-10-01T15:38:27.067 回答