J'ai une chaîne nommée File_Test_name_1285931677.xml
. File
est le mot commun et 1285931677
est un nombre aléatoire. Je veux supprimer File_
et _1285931677.xml
, c'est-à-dire le préfixe jusqu'au premier _
et le suffixe du dernier _
sur.Chaîne Remplacer dans PHP
Répondre
Vous pouvez le faire avec explode
, array_slice
et implode
:
implode('_', array_slice(explode('_', $str), 1, -1))
Avec explode
la chaîne est coupé en parties à _
afin que le résultat est un tableau comme celui-ci:
array('File', 'Test', 'name', '1285931677.xml')
Avec array_slice
tout de la seconde à la seconde est saisi, par exemple:
array('Test', 'name')
Il est ensuite remis ensemble à l'aide implode
, entraînant:
Test_name
Une autre approche serait d'utiliser strrpos
et substr
:
substr($str, 5, strrpos($str, '_')-5)
Depuis File_
a une longueur fixe, nous peut utiliser 5 comme position de départ. strrpos($str, '_')
renvoie la position de la dernière occurrence de _
. En soustrayant 5 de cette position, nous obtenons la distance du cinquième caractère à la position de la dernière occurrence que nous utilisons comme longueur de la sous-chaîne.
Si vous ne souhaitez que remplacer en tant que chaîne replace_string est le chemin à parcourir
$str = "File_Test_name_1285931677.xml";
echo str_replace("File_Test_name_1285931677.xml",'Test_name', $str);
Si vous souhaitez renommer un fichier, vous devez utiliser rename:
rename("/directors_of_file/File_Test_name_1285931677.xml", "Test_name");
Je serais paresseux et utiliser:
$file_name = "File_Test_name_1285931677.xml";
preg_replace("/^File_Test_name_\d+\.xml$/", "Test_name.xml", $filename);
Ceci est fourni que vous voulez toujours appeler il Test_name. Si TEST_NAME change:
preg_replace("/^File_(.+)_\d+\.xml$/", "$1.xml", $file_name);
EDIT (Encore une fois): Relisez votre mise à jour. Vous voulez le deuxième exemple.
$filename = preg_replace('/^File_(.*?)_\d+\.xml$/', '$1', $filename);
Vous pouvez également utiliser substr mais clairement un str_replace avec correspondance de motif serait mieux:
$file = "File_test_name_12345.xml";
$new_file = substr($file,strpos($file,'_')+1,strrpos($file,'_')-strpos($file,'_')).substr($file,strrpos($file,'.'));
Et les gens disent que les expressions régulières sont illisibles :) –
- 1. remplacer chaîne dans preg_replace
- 2. chaîne remplacer dans un fichier avec php
- 3. comment remplacer une chaîne dans php
- 4. Remplacer une chaîne sur php
- 5. Remplacer toute chaîne avant "/", PHP
- 6. Remplacer la chaîne en php
- 7. PHP remplacer la chaîne d'aide
- 8. PHP Remplacer la dernière occurrence d'une chaîne dans une chaîne?
- 9. Chaîne javascript remplacer l'équivalent sur PHP?
- 10. Remplacer une chaîne en JavaScript et PHP
- 11. PHP: Preg remplacer la chaîne avec rien
- 12. Comment remplacer une variable dans une chaîne avec PHP?
- 13. Comment remplacer les étiquettes multiples%% dans une chaîne avec PHP
- 14. Chaîne MySQL remplacer
- 15. Remplacer signe $ dans la chaîne
- 16. comment remplacer certains caractères dans une chaîne?
- 17. Remplacer deuxième instance de chaîne
- 18. php preg remplacer :: regex
- 19. remplacer plusieurs "-" PHP
- 20. Expression régulière PHP remplacer?
- 21. php et à remplacer
- 22. chaîne rapide remplacer question mod_rewrite
- 23. PHP - Remplacer couleur dans l'image
- 24. Utiliser javascript remplacer pour remplacer les nombres dans une chaîne?
- 25. Remplacer tous les caractères spéciaux d'une chaîne en utilisant PHP
- 26. chaîne remplacer php - un mot à plus de mots
- 27. Lua Chaîne remplacer
- 28. Javascript chaîne Remplacer
- 29. PHP chaîne Remplacer une portion de tableau des valeurs
- 30. PHP: remplacer une chaîne d'une chaîne particulière par une chaîne particulière
Vous devriez élaborer un peu en ajoutant concours, parce que la réponse littérale à votre question est trivial 'str_replace' –
Y at-il un motif ou le fichier est toujours nommé comme ça? – Shikiryu
Je veux supprimer Première chaîne Avant _ et dernière chaîne après_ – Warrior