0
votes

PHP remplace les zéros principaux avec le même nombre d'espaces

Je voudrais remplacer une chaîne comme 0001 avec "1" avec 3 espaces.

J'ai essayé str_replace mais cela ne fonctionne pas sur 0010. J'ai essayé de Preg_replace mais je ne peux pas obtenir le droit de remplacement pour remplacer le même numéro P>

J'ai écrit cette chose de base et cela fonctionne, mais je cherche quelque chose de plus efficace si possible. P >

preg_replace('/0+/', ' ', $pin)


1 commentaires

L'efficacité d'une importance considérable est-elle une importance énorme parce que vous effectuez ce remplacement zéro sur des centaines de milliers de cordes en une seule exécution?


3 Réponses :


0
votes

Je ne vois pas comment procéder plus facile avec une expression régulière, mais vous pouvez rendre votre autre code plus concis en utilisant str_repeat : xxx


1 commentaires

Vous pouvez combiner certaines de ces déclarations pour faire moins de lignes de code, mais je pense que cela sera plus lisible. Je préfère toujours le code lisible au code intelligent.



0
votes

Vous avez dit:

mais je cherche quelque chose de plus efficace si possible

  • Premièrement, notez qu'un one-liner n'est pas nécessairement efficace (comme vous l'avez essayé pour Preg_replace () et regex est en fait un peu plus lent puisqu'il est compilé d'abord).
  • Deuxièmement, vous pouvez mieux adopter pour juste une approche de 2 pass sur la chaîne. Cela modifie également la chaîne en place sans variables de chaîne supplémentaires qui est souhaitable dans votre cas.

    snippet: xxx


0 commentaires

1
votes

\ g pour la victoire!

https: / /wwww.regular-expressions.info/continue.html

\ g correspondra au début de la chaîne et continuera à correspondre jusqu'à ce qu'il ne puisse pas. < / p>

Quelle est l'utilisation de '\ g' ancreur dans regex?

Faites correspondre un zéro à partir du début de la chaîne, puis correspondez à zéro à zéro à la fois. Remplacez chaque zéro correspondant avec un espace.

code: ( Démo ) xxx

sortie: xxx


1 commentaires

@Andrew est cette question résolue?