我想知道是否可以过滤掉该字符串末尾的帧填充。
new_york.0001.tga
有1000张图片,都有类似的图案:
filename.padding.extension
基本上,我想在我传递函数的任何文件名中找到填充,例如:
new_york.0001.tga
应找到0001
s._2234.name.8923482.jpg
应找到8923482
s.sdf&#$.s.d__.name.s23444.tiff
应找到23444
所有图像名称填充编号,将直接在扩展名之前,这是文件名中唯一连续的内容。
我吮吸正则表达式,并且很想学习如何去做,虽然有些指导可能会有所帮助......
三江源!
答案 0 :(得分:2)
您可以使用简单的.split()
的JavaScript
var str = "s._2234.name.8923482.jpg";
var arr = str.split('.');
alert(arr[arr.length-2]);
编辑:根据评论This doesn't work for s.sdf&#$.s.d__.name.s23444.tiff
更新代码
var str = "s.sdf&#$.s.d__.name.s23444.tiff";
var arr = str.split('.');
var desiredStr = arr[arr.length - 2].match(/\d+/)
alert(desiredStr);
答案 1 :(得分:1)
使用\d+\.[a-zA-Z]+(?:$|\s)
为了解释这一点,它会查找数字[0-9]
(这是\d
所做的)一次或多次(这是+
所做的),只要接下来是.
和字母后跟字符串的结尾。
答案 2 :(得分:0)
使用JS,RegExp /\d+\.\D+$/
将捕获数字和扩展名。 .split('.')[0]
只能获得数字。
答案 3 :(得分:0)
<?php
$str='s._2234.name.8923482.jpg';
preg_match_all('/[0-9]+/', $str, $matches);
echo array_pop($matches[0]); //"prints" 8923482
上述正则表达式匹配所有数字,然后使用array_pop()
答案 4 :(得分:0)
如果您知道文件名始终采用filename.padding.extension
格式,则可以使用该文件:
$files = array("new_york.0001.tga", // Should find 0001
"s._2234.name.8923482.jpg", // Should find 8923482
"s.sdf&#$.s.d__.name.s23444.tiff"); // Should find 23444
foreach ($files as $f) {
$parts = explode('.', $f);
preg_match("/\d+/", $parts[count($parts)-2], $padding);
echo $padding[0];
}
explode
将每个文件名拆分为多个部分,由.
分隔。您需要explode
d数组的倒数第二个元素。 preg_match
用于挑选数字部分。
0001
8923482
23444
或者,您可以使用preg_split:
foreach ($files as $f) {
$split = preg_split("/\.[^\d]*/", $f);
echo $split[count($split)-2];
}