我试图从这样的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”返回一个包含多个值的数组。
是否可以通过仅修改模式来实现?
答案 0 :(得分:5)
它将始终返回一个数组,但您可以更改该模式,以便它只匹配您想要的。
$uri = "uri.com/upload/123456789_abc.ext";
preg_match('#(?<=uri\.com/upload/)\d+#is', $uri, $match );
print_r($match);
返回
数组([0] =&gt; 123456789)
所以它仍然是一个数组,但它只包含整个匹配,即你的数字。
(?<=uri\\.com/upload/)
是一个后视,它与该部分不匹配,所以它不是结果的一部分。
\d+
仅匹配数字,因此不再需要_
。
答案 1 :(得分:0)
不在PHP中。另一方面,在perl中,你有自动变量,比如$ 1,$ 2引用最后一个匹配的正则表达式。也就是说,在您的示例中,执行匹配后,$ 1变量将保留整数。
所以这个想法一般都没问题。你会喜欢perl ..: - )