Заменить строку в PHP - PullRequest
       2

Заменить строку в PHP

1 голос
/ 01 октября 2010

У меня есть строка с именем File_Test_name_1285931677.xml.File является общим словом, а 1285931677 является случайным числом.Я хочу удалить File_ и _1285931677.xml, то есть префикс до первого _ и суффикс с последнего _ вкл.

Ответы [ 5 ]

5 голосов
/ 01 октября 2010

Вы можете сделать это с помощью 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

Другой подход заключается в использовании strrpos и substr:

substr($str, 5, strrpos($str, '_')-5)

Поскольку File_ имеет фиксированную длину, мы можем использовать 5 в качестве начальной позиции.strrpos($str, '_') возвращает позицию последнего вхождения _.Вычитая 5 из этой позиции, мы получаем расстояние от пятого символа до позиции последнего вхождения, которую мы используем в качестве длины подстроки.

3 голосов
/ 01 октября 2010

Я был бы ленив и использовал бы:

$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);

EDIT (снова): перечитайте ваше обновление.Вам понадобится второй пример.

1 голос
/ 01 октября 2010
$filename = preg_replace('/^File_(.*?)_\d+\.xml$/', '$1', $filename);
1 голос
/ 01 октября 2010

Если вы хотите заменить только в виде строки 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");
0 голосов
/ 01 октября 2010

Вы также можете использовать substr, но лучше использовать str_replace с сопоставлением с образцом:

$file = "File_test_name_12345.xml";
$new_file = substr($file,strpos($file,'_')+1,strrpos($file,'_')-strpos($file,'_')).substr($file,strrpos($file,'.'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...