Avatar billede tipsen Nybegynder
20. juli 2004 - 02:13 Der er 3 kommentarer og
1 løsning

substrr_replace - substition af streng bagfra!

Hej eksperter

Jeg leder efter en funktion der kan erstatte den sidste (og KUN den sidste) instans af en delstreng i en større streng.

Dvs jeg har:

$bigstring = '....'; // binært indhold
$searchstring = 'blabla1'; // søgestrengen
$replacestring = 'blabla2'; //erstatningsstrengen

så skal den sidste 'blabla1' i $bigstring erstattes med 'blabla2'

På nuværende tidspunkt bruger jeg følgende som er gaflet fra php.net:

/**
* Replace only the last occurence of the search string with the replacement string
* @param string $string
* @param string $search
* @param string $replace
* @return string
* @access public
*/
function replaceLast($string, $search, $replace) {
  $pos = false;
  if (is_int(strpos($string, $search))) {
      $endPos = strlen($string);
      while ($endPos > 0) {
          $endPos--;
          $pos = strpos($string, $search, $endPos);
          if (is_int($pos)) {
              break;
          }
      }
  }
  if (is_int($pos)) {
      $len = strlen($search);
      return substr_replace($string, $replace, $pos, $len);
  }
  return $string;
}

Den virker dog håbløst langsomt og det må kunne gøres *meget* smartere! Måske vha. en regexp, som jeg dog ikke er superskarp til!

Det er vigtigt, at funktionen er binary-safe, da den skal udføres på en binær streng.

På forhånd tak.

Mvh Tommy
Avatar billede roenving Novice
20. juli 2004 - 02:52 #1
Har php ikke metoder, som er tilsvarende denne javascript-konstruktion:

str = str.split("").reverse().join("");

-- som simpelthen vender en streng om ...

Hvis du vender alle tre strenge om kan du køre en simpel replace af en type som kun skifter den første forekomst (i javascript er det en replace med en tekst-parameter eller ikke-global regexp !-)

Til sidst vender du selvfølgeligt dit resultat igen ...

Om den så er binary-safe kan jeg ikke gennemskue !o]
Avatar billede 7th Praktikant
20. juli 2004 - 05:11 #2
Jeg er ikke helt sikker på hvad du mener med binary-safe, men følgende skulle meget gerne finde sidste forkomst af en defineret streng, og erstatter den med noget andet.

// $string = "xxxblabla1xxxblabla3xxxblabla1xxx";
// $string = "xxxblabla1xxxblabla3xxxblabla2xxx";
$string = "xxxblabla1xxxblabla1xxxblabla3xxx";

$flast = "blabla1";
$rtext = "7777777";

$pos = strpos(strrev($string) , strrev($flast));
$len = strlen($flast);

echo strrev(substr_replace(strrev($string) , $rtext , $pos , $len));
Avatar billede tipsen Nybegynder
17. oktober 2004 - 18:15 #3
Jeg siger tak - smid et svar!
Avatar billede tipsen Nybegynder
22. oktober 2004 - 15:44 #4
Lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester