I have string named File_Test_name_1285931677.xml. File is the common word and 1285931677 is a random number.
I want to remove File_ and _1285931677.xml, i.e. prefix up to first _ and suffix from last _ on.
5 Answers
You can do this with explode, array_slice and implode:
implode('_', array_slice(explode('_', $str), 1, -1))
With explode the string gets cut into parts at _ so that the result is an array like this:
array('File', 'Test', 'name', '1285931677.xml')
With array_slice everything from the second to the second last is grabbed, e.g.:
array('Test', 'name')
This is then put back together using implode, resulting in:
Test_name
Another approach would be to use strrpos and substr:
substr($str, 5, strrpos($str, '_')-5)
Since File_ has fixed length, we can use 5 as the starting position. strrpos($str, '_') returns the position of the last occurrence of _. When subtracting 5 from that position, we get the distance from the fifth character to the position of the last occurrence that we use as the length of the substring.
Comments
I would be lazy and use:
$file_name = "File_Test_name_1285931677.xml";
preg_replace("/^File_Test_name_\d+\.xml$/", "Test_name.xml", $filename);
This is provided you always want to call it Test_name. If Test_name changes:
preg_replace("/^File_(.+)_\d+\.xml$/", "$1.xml", $file_name);
EDIT (Again): Reread your update. You'll want the second example.
Comments
If you only want to replace as string replace_string is the way to go
$str = "File_Test_name_1285931677.xml";
echo str_replace("File_Test_name_1285931677.xml",'Test_name', $str);
If you want to rename a file you need to use rename:
rename("/directors_of_file/File_Test_name_1285931677.xml", "Test_name");
str_replace