php - 如何使用 preg_match 返回只需要的匹配

标签 php regex pattern-matching preg-match

我正在尝试从这样的 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/

相关文章:

php - 合并两个MySQL查询并获取两个邮政编码之间的距离

regex - 从终端中的命令输出中提取单行

windows-7 - 批处理脚本: Find pattern in string

regex - R中是否有用于正则表达式的原始字符串?

javascript - 正则表达式提取括号内容

c# - 从 C# 中的字符串行获取特定字段或字符

c++ - 哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool?

php - Web 服务器和 MySQL 服务器在同一台机器上 "Error :(28000/1045) Access denied for user "

php - 如何在drupal 7中包含php文件

php - 合并来自不同文件的 2 个数组