我有一个String(文件名): s_113_2.3gp
如何提取第二个下划线后出现的数字?在这种情况下它是' 2
'但在某些情况下可以是几位数.
此外,第一个下划线后出现的位数也可能不同,因此该String的长度不是恒定的.
您可以使用捕获组:
preg_match('/_(\d+)\.\w+$/', $str, $matches);
$number = $matches[1];
Run Code Online (Sandbox Code Playgroud)
\d+
代表一个或多个数字.围绕它的括号捕获它,以便稍后可以使用它来检索它$matches[1]
.在.
需要进行转义,因为否则会匹配任何字符,但换行符.\w+
匹配1个或多个单词字符(数字,字母,下划线).最后$
代表字符串的结尾并"锚定"正则表达式(否则你会遇到包含多个字符串的问题.
).
这也允许任意文件扩展名.
正如Ωmega在下面指出的那样,还有另一种可能性,即不使用捕获组.使用lookarounds的概念,您可以避免_
在开始和\.\w+$
结束时进行匹配:
preg_match('/(?<=_)\d+(?=\.\w+$)/', $str, $matches);
$number = $matches[0];
Run Code Online (Sandbox Code Playgroud)
但是,在应用这个相当小的优化之前,我建议进行性能分析.但要记住这一点(或者更确切地说,阅读!).
归档时间: |
|
查看次数: |
112 次 |
最近记录: |