可能重复:
从字符串中提取数字
我preg_match()
用来从字符串中提取数字。
示例字符串是:advent_id ----------- 3163 (1 row)
,我需要提取后跟连字符的数字,而不是行数。为它编写正则表达式的正确方法是什么?
我尝试preg_match('/^advent_id\s------------\s(.*)\s\(/', $cn, $matches);
了$cn
该源字符串的位置,但它不起作用。请注意,该号码可以有任意位数。
只需提取行中的第一个整数。
$x = 'advent_id ----------- 3163 (1 row)';
preg_match('/\d+/', $x, $m);
echo "$m[0]\n";
产生:
3163
编辑
如您所见, 的默认行为preg_match()
是匹配第一次出现,然后停止。不同的是preg_match_all()
$s = 'advent_id ----------- 3163 (1 row)';
preg_match('~-+ (\d+)~', $s, $m);
print_r($m);
Array
(
[0] => ----------- 3163
[1] => 3163
)
你很亲密。您的主要问题是您.*
正在匹配任何字符,因此您必须使正则表达式变得复杂,以确保它只是抓取数字。通过将该部分更改为[0-9]*
它只会匹配数字,并使您的正则表达式更简单。
$cn = 'advent_id ----------- 3163 (1 row)';
preg_match('/^advent_id -* ([0-9]*)/', $cn, $matches);
print_r($matches[1]);
你可以试试
$string = "advent_id ----------- 3163 (1 row)" ;
$matches = array();
preg_match('/\d+/', $string, $matches);
print($matches[0]);
输出
3163