1

嗯..我的意思是我不能让它工作......所以这就是我所做的......

$url = 'http://test/test/9244349';
$test = preg_match('#\d*#', $url, $matches);

数组(大小=1)0 => 字符串''(长度=0)

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

4

4 回答 4

1

尝试用 替换*+如果你想匹配数字,那么匹配的模式没有意义,零数字也是如此,是吗?

preg_match('/\d+/','http://test/test/9244349',$matches);
echo $matches[0];//output:9244349
于 2012-10-26T14:54:41.993 回答
1

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

  • \d*表示任意位数。包括零。
  • 我们从字符串的开头开始。我们看到一个h.
  • h不匹配\d
  • 但是 - 我们也可以匹配\d. 所以匹配之前 h的空字符串。
  • 我们已经到了正则表达式的末尾,并且找到了匹配项。
  • 成就解锁!
  • (当然,这是零个字符的匹配,但没关系。Perl 兼容的正则表达式将始终返回最左边的可能匹配,即使字符串中可能有更多匹配可能更长)。

因此,正如其他帖子中提到的,将 更改*+强制至少一位数字匹配,然后其余的将随之而来。

你也可以使用preg_match_all(),但是你会得到很多空匹配,两个非数字之间的每个位置一个......

于 2012-10-26T14:59:52.887 回答
0

更改*+,它将起作用

于 2012-10-26T14:54:27.183 回答
0

这是基本名称

echo basename($url);
于 2012-10-26T14:55:24.070 回答