带有时间戳文件的PHP字符串操作帮助

带有时间戳文件的PHP字符串操作帮助,php,Php,我正试图找到使用php的字符串函数从文件名中删除时间戳的最佳方法。时间戳与文件名的其余部分分开,左边是下划线,右边是文件扩展名的起始点(例如myfile_12343434.jpg)——我只想要下划线之前的文本,尽管其长度可能会有所不同。处理这个问题的最好方法是什么?谢谢 编辑以保持扩展完整(包括.gd2和.JPEG)执行以下操作: 这实际上只删除了“_123”部分,但不太美观。对于我们当中的纯粹主义者,一个带有前瞻断言的版本,它只删除时间戳: $new = preg_replace("/_\\d

我正试图找到使用php的字符串函数从文件名中删除时间戳的最佳方法。时间戳与文件名的其余部分分开,左边是下划线,右边是文件扩展名的起始点(例如myfile_12343434.jpg)——我只想要下划线之前的文本,尽管其长度可能会有所不同。处理这个问题的最好方法是什么?谢谢

编辑以保持扩展完整(包括
.gd2
.JPEG
)执行以下操作:

这实际上只删除了“_123”部分,但不太美观。对于我们当中的纯粹主义者,一个带有前瞻断言的版本,它只删除时间戳:

$new = preg_replace("/_\\d+(?=\\.[0-9a-z]+\$)/i","",$orig);
你可以用这个:

$filename = explode("_", $orig_filename)[0];

最好的方法是使用
preg\u replace()
指定精确匹配。一个良好的开端如下(这也将保留扩展):

但由于这是一个unix时间戳,我们可以通过指定它将匹配的数字部分的长度来做得更好:

$new = preg_replace("/_\d{1,11}/","",$orig);

+1表示preg_replace,它将保留文件名的其余部分(包括扩展名)。但是我会使用
preg\u replace(“/\ud+/”,“,$orig)
因为我们知道时间戳应该是数字的。@JGB:Uhm,这也会删除我认为是问题所在的扩展名。不过,我可能错了,在这种情况下,
\d
是修复它的完美方法。感谢各位的建议-是的,我也想保留扩展:)我会仔细考虑这些建议,以了解每一个建议的工作方式。你完全正确。我完全误解了这个问题,认为他也希望扩展保持不变。你不能用这种方式提取数组的第一个元素,你必须使用一个中间变量:$a=explode(“\u”,$orig\u filename)$文件名=$a[0]@达玛-你不必“必须”。例如:list($filename)=分解('''u',$orig'u filename);
$new = preg_replace("/_\d+/","",$orig);
$new = preg_replace("/_\d{1,11}/","",$orig);