如何只返回与preg_match匹配的匹配项

Jam*_*rzs 3 php regex pattern-matching preg-match

我试图从这样的uris列表中解析一个整数:

uri.com/upload/123456789_abc.ext
Run Code Online (Sandbox Code Playgroud)

我正在使用这种模式:

preg_match( "#uri\.com\/upload\/(.*?)_#is", $uri, $match );
Run Code Online (Sandbox Code Playgroud)

哪个有效并且有效:

Array
(
    [0] => uri.com/upload/123456789_
    [1] => 123456789
)
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有办法让$ match =="123456789"返回一个具有多个值的数组.

是否可以通过仅修改模式来实现?

ste*_*ema 5

它将始终返回一个数组,但您可以更改模式,以便它只匹配您想要的.

$uri = "uri.com/upload/123456789_abc.ext";
preg_match('#(?<=uri\.com/upload/)\d+#is', $uri, $match );
print_r($match);
Run Code Online (Sandbox Code Playgroud)

回报

数组([0] => 123456789)

所以它仍然是一个数组,但它只包含整个匹配,即你的数字.

(?<=uri\\.com/upload/) 是一个lookbehind,它与那部分不匹配,所以它不是结果的一部分.

\d+只是匹配数字,所以_不再需要了.