我有一个名为File_Test_name_1285931677.xml
的字符串。 File
是常用词,1285931677
是随机数。
我想删除File_
和_1285931677.xml
,即前缀为_
的前缀和后缀_
的后缀。
答案 0 :(得分:5)
您可以使用explode
,array_slice
和implode
执行此操作:
implode('_', array_slice(explode('_', $str), 1, -1))
使用explode
,字符串会被切割成_
的部分,以便结果是这样的数组:
array('File', 'Test', 'name', '1285931677.xml')
使用array_slice
抓住从第二个到第二个的所有内容,例如:
array('Test', 'name')
然后使用implode
将其重新组合在一起,生成:
Test_name
substr($str, 5, strrpos($str, '_')-5)
由于File_
具有固定长度,我们可以使用5作为起始位置。 strrpos($str, '_')
返回上次出现_
的位置。当从该位置减去5时,我们得到从第五个字符到最后一个出现位置的距离,我们将其用作子串的长度。
答案 1 :(得分:3)
我会懒惰并使用:
$file_name = "File_Test_name_1285931677.xml";
preg_replace("/^File_Test_name_\d+\.xml$/", "Test_name.xml", $filename);
如果你总是想把它称为Test_name。如果Test_name更改:
preg_replace("/^File_(.+)_\d+\.xml$/", "$1.xml", $file_name);
编辑(再次): 重新阅读您的更新。你会想要第二个例子。
答案 2 :(得分:1)
如果您只想替换为字符串replace_string,那就是
$str = "File_Test_name_1285931677.xml";
echo str_replace("File_Test_name_1285931677.xml",'Test_name', $str);
如果要重命名文件,则需要使用rename:
rename("/directors_of_file/File_Test_name_1285931677.xml", "Test_name");
答案 3 :(得分:1)
$filename = preg_replace('/^File_(.*?)_\d+\.xml$/', '$1', $filename);
答案 4 :(得分:0)
您也可以使用substr,但显然str_replace与模式匹配会更好:
$file = "File_test_name_12345.xml";
$new_file = substr($file,strpos($file,'_')+1,strrpos($file,'_')-strpos($file,'_')).substr($file,strrpos($file,'.'));