Php Preg#u match不';在尝试获取字符串中的数字时无法工作

Php Preg#u match不';在尝试获取字符串中的数字时无法工作,php,regex,preg-match,Php,Regex,Preg Match,哼。。我的意思是我不能让它工作。。。 这就是我所做的 $url = 'http://test/test/9244349'; $test = preg_match('#\d*#', $url, $matches); 数组(大小=1) 0=>字符串“”(长度=0) 我只想捕捉“9244349”,但我不明白它为什么不起作用。将*更改为+,它会起作用尝试将*替换为+,如果要匹配数字,模式中也没有匹配的点,零位,对吗 preg_match('/\d+/','http://test/test/924434

哼。。我的意思是我不能让它工作。。。 这就是我所做的

$url = 'http://test/test/9244349';
$test = preg_match('#\d*#', $url, $matches);
数组(大小=1) 0=>字符串“”(长度=0)


我只想捕捉“9244349”,但我不明白它为什么不起作用。

*
更改为
+
,它会起作用

尝试将
*
替换为
+
,如果要匹配数字,模式中也没有匹配的点,零位,对吗

preg_match('/\d+/','http://test/test/9244349',$matches);
echo $matches[0];//output:9244349
这是


让我们玩正则表达式引擎:

  • \d*
    表示任意位数。包括零
  • 我们从字符串的开头开始。我们看到一个
    h
  • h
    \d
    不匹配
  • 但是-我们也可以匹配
    \d
    的零重复。因此
    h
    之前的空字符串匹配
  • 我们已经到了正则表达式的末尾,找到了匹配项
  • 成就解锁
  • (当然,它是零个字符的匹配,但这没关系。与Perl兼容的正则表达式将始终返回最左边的可能匹配,即使前面的字符串中可能还有更长的匹配)
因此,如其他帖子所述,将
*
更改为
+
,以强制至少一个数字匹配,然后其他数字将跟随


你也可以使用
preg\u match\u all()
,但是你会得到很多空匹配,两个非数字之间的每个位置都有一个匹配…

谢谢,我读了一篇关于regex的小教程。如果x+至少出现一次,它就表示x+用于获取x。。那么为什么它在这里不起作用呢?在这种情况下有效,但是
http://test/test/9244349?id=123
将返回
9244349?id=123
@EliasVanOotegem:是的,但是如果您是一个聪明的人,这可以处理,我想在
(int)basename($url)中处理这个问题就是这样
echo basename($url);