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