我正在尝试从这样的 uris 列表中解析一个整数:
uri.com/upload/123456789_abc.ext
我正在使用这种模式:
preg_match( "#uri\.com\/upload\/(.*?)_#is", $uri, $match );
哪个有效并返回:
Array
(
[0] => uri.com/upload/123456789_
[1] => 123456789
)
但我想知道是否有办法使 $match == "123456789"而不是返回具有多个值的数组。
只修改模式是否可以做到?
最佳答案
它将始终返回一个数组,但您可以更改模式,以便它只匹配您想要的内容。
$uri = "uri.com/upload/123456789_abc.ext";
preg_match('#(?<=uri\.com/upload/)\d+#is', $uri, $match );
print_r($match);
返回
Array ( [0] => 123456789 )
所以它仍然是一个数组,但它只包含整个匹配项,也就是你的数字。
(?<=uri\\.com/upload/)
是一个lookbehind,它不匹配那部分,所以它不是结果的一部分。
\d+
仅匹配数字,因此不再需要 _
。
关于php - 如何使用 preg_match 返回只需要的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10472833/