Vous devez échapper à la ?
avec \
<?php
$string = 'name1?name2?';
$pattern = '/\?/';
$replacement = '/';
echo preg_replace($pattern, $replacement, $string);
?>
Il est temps de tester ...
Je maintiens ma réponse, car elle répondait directement à la question de l'OP. Mais mon commentaire de vitesse n'était pas précis - du tout. Les différences que je trouvais sont faciles à voir, mais ne sont pas qu'impressionnant OMI *
L'indice de référence. Je pris la chaîne de OP et concaténé il 500000 fois - de sorte que chaque fonction aurait beaucoup de remplacements à faire (1,5 ou 2 millions selon).
Voici les fonctions et leurs vitesses:
str_replace('?', '/', $test); // name1/name2/name3/name4/
0.388642073
0.389673948
0.385308981
preg_replace('/\?/', '/', $test); // name1/name2/name3/name4/
0.812348127
0.812065840
0.819634199
$bad = array('1?','2?','3?');
$good = array('1/','2/','3/');
str_replace($bad, $good, $test); // name1/name2/name3/name4?
0.712552071
0.725568056
0.718420029
preg_replace('/\?(\w+\d+)/', '/$1', $test); // name1/name2/name3/name4?
1.515372038
1.516302109
1.517566919
Alors ... je perds. Ce test a montré que str_replace() était 2X plus rapide que preg_replace(). Mais, 1,5 secondes vs 0,7 secondes (deux dernières fonctions) n'est pas mauvais quand vous considérez que les 1,5 million de remplacements sont terminés - sans compter que le dernier résoudra beaucoup plus de combinaisons que son concurrent. Vous ne voulez pas la pompe fist-célébration lorsque vous écrivez cette fonction RegEx parfaite? :-)
Pouvez-vous nous montrer ce que vous avez déjà essayé?Le titre et le tag de votre question impliquent que vous avez pris quelques photos du problème, mais votre question semble entièrement dépourvue de code. – Charles