[英]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.