繁体   English   中英

如何使用php中的正则表达式从字符串中提取某个数字?

[英]how to extract a certain digit from a String using regular expression in php?

我有一个字符串(文件名): s_113_2.3gp

如何提取出现在第二个下划线之后的数字? 在这种情况下,它是“ 2 ”,但在某些情况下,它可以是几位数字。

此外,出现在第一个下划线之后的位数可能会有所不同,因此此字符串的长度不是恒定的。

您可以使用捕获组:

preg_match('/_(\d+)\.\w+$/', $str, $matches);
$number = $matches[1];

\\d+代表 1 个或多个数字。 周围的括号捕获它,因此您可以稍后使用$matches[1]检索它。 . 需要转义,否则它将匹配除换行符以外的任何字符。 \\w+匹配 1 个或多个单词字符(数字、字母、下划线)。 最后$代表字符串的结尾并“锚定”正则表达式(否则你会遇到包含多个.字符串的问题)。

这也允许任意文件扩展名。

正如Ωmega在下面指出的那样,还有另一种可能性,即不使用捕获组。 使用环视的概念,您可以避免在开头匹配_并在结尾匹配\\.\\w+$

preg_match('/(?<=_)\d+(?=\.\w+$)/', $str, $matches);
$number = $matches[0];

但是,在应用这个相当小的优化之前,我会建议进行分析。 但这是需要牢记的(或者更确切地说,要继续阅读!)。

使用正则表达式查看它是非常短的代码:

$n = preg_match('/(?<=_)\d+(?=\.)/', $str, $m) ? $m[0] : "";

...内容如下:找到一个或多个位于下划线(?<=_)和句点(?=\\.)之间的数字\\d+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM