php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.11.2011, 19:17  
Benutzer
 
Registriert seit: 01.12.2010
Beiträge: 51
PHP-Kenntnisse:
Fortgeschritten
Quellcode befindet sich auf einem aufstrebenden Ast
Standard Preg_Replace

Hi,

hoffe Jemand kann mir helfen.
Unten im Skriptteil habe ich das erste "such / mach" Paar auskommentiert.
Dieses sollte das Skript später können. Er ändert den String in diesem Fall nicht.

Im zweiten "such / mach" Paar klappt alles. Er ändert die erste vorkommende 100 auf eine 99.

Wie kann ich die Probleme mit der Raute und dem Plus übergehen?
Str_Replace ist keine Alternative, da ich nur das erste Vorkommen ändern darf.


PHP-Code:
<?php

$string
=".#5+100#4+100#5+100";


echo 
"1. ".$string."<br>";

//$such="#5+100";
//$mach="#5+99";

$such="100";
$mach="99";

$string=preg_replace("/".$such."/",$mach,$string,1);

echo 
"2. ".$string;

?>

Vielen Dank für eure Mühen !!
Quellcode ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.11.2011, 19:37  
Benutzer
 
Registriert seit: 01.12.2010
Beiträge: 51
PHP-Kenntnisse:
Fortgeschritten
Quellcode befindet sich auf einem aufstrebenden Ast
Standard

Habe ne Lösung gefunden - selbst gebastelt - aber weiß nicht ob es umbedingt die schönste und schnellste Variante ist ...
Wenn also Jemand mit Preg_Replace Bescheid weiß, wäre ich dennoch dankbar für Alternativen


PHP-Code:
$string=".#3+100#5+100#4+100#5+100";

echo 
"1. ".$string."<br>";

$such="#5+100";
$mach="#5+99";


$replacement $such;
$pos strpos($string$such);
$string substr($string0$pos) . $mach substr($string$pos+strlen($replacement));  


echo 
"2. ".$string
Quellcode ist offline   Mit Zitat antworten
Alt 08.11.2011, 19:59  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Letzter Parameter: http://php.net/manual/en/function.str-replace.php



Der Vollständigkeit halber:

Dein Stichwort für PCRE ist Escaping.

- http://www.php.net/manual/en/regexp.reference.meta.php

Wenn du nicht die syntaktische Bedeutung des Meta-Characters einfügen willst, musst du in der Regel (aber nicht immer) einen Backslash voranstellen.

Was dir hier helfen würde, ist ansonsten auch http://www.php.net/manual/en/function.preg-quote.php.
__________________
Blog | Buch | Kaloa
mermshaus ist gerade online   Mit Zitat antworten
Alt 09.11.2011, 10:45  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Sorry für den Off-Topic, aber so wirklich gelungen ist die Selbsteinschätzung m.E. nicht.

Davon mal abgesehen, bin ich immer wieder fasziniert über diese sinnfreien Variablen-Deklarationen:
PHP-Code:
$such $replacement
Warum arbeitest Du nicht gleich mit $such weiter oder nennst sie von vornherein $replacement?
Oder ist das vielleicht ein genialer Versuch, eine deutschsprachige Variable in eine englischsprachige zu migrieren?!
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (09.11.2011 um 10:49 Uhr).
Arne Drews ist offline   Mit Zitat antworten
Alt 09.11.2011, 14:44  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Bevor noch komliziertere Scripte gepostet werden, hier eine Beispiel mit preg_replace. Den entscheidenden Hinweis auf preg_quote hat ja schon mermshaus gegeben.
PHP-Code:
$string=".#3+100#5+100#4+100#5+100";
$such="#5+100";
$mach="#5+99"
$string2 preg_replace("/".preg_quote($such,"/")."/",$mach,$string,1); 
echo 
$string2
@mermshaus: Dein Hinweis auf den letzten Parameter von str_replace hab ich nicht verstanden. Wie soll das helfen nur 1x zu ersetzen ?

Edit2: Den Parameter für den delimiter bei preg_quote sollte man nicht unbedingt einsparen, wie es mermshaus gezeigt hat.

Geändert von jspit (10.11.2011 um 08:04 Uhr). Grund: Code geändert
jspit ist offline   Mit Zitat antworten
Alt 09.11.2011, 14:48  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von PHP Manual str_replace-Parameter count
If passed, this will be set to the number of replacements performed.
Beitrag editiert:
ah ja... jetzt sehe ich auch was Du meins jspit. Dann hast Du wohl recht...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 09.11.2011, 14:54  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Ja, liefert mir die Anzahl der Ersetzungen. Mit dem obigen Beispiel müßte dort eine 2 landen. Die Frage war was bringt mir das, wenn nur 1x ersetzt werden soll ?
jspit ist offline   Mit Zitat antworten
Alt 09.11.2011, 21:43  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Verd… ich habe mich verhauen. Sorry. Ich war sehr überzeugt davon, dass es eine Stringfunktion gibt, die das kann, und das sah auf den ersten Blick so richtig aus.

PHP-Code:
<?php

$subject     
'.#5+100#4+100#5+100';
$searchTerm  '#5+100';
$replacement '#5+99';

$pattern '/' preg_quote($searchTerm'/') . '/';

$changed preg_replace($pattern$replacement$subject1);

printf("1. %s\n"$subject);
printf("2. %s\n"$changed);
__________________
Blog | Buch | Kaloa
mermshaus ist gerade online   Mit Zitat antworten
Alt 09.11.2011, 21:56  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

PHP-Code:
function str_replace_limit($search$replace$subject$limit = -1) {
  
$limit = (int)$limit;
  if (
$limit <= 0) {
    return 
str_replace($search$replace$subject);
  }
  ++
$limit;
  
$return '';
  
$parts explode($search$subject$limit);
  for (
$i 0$length count($parts) - 1$i $length$i++) {
    
$return.= $parts[$i].$replace;
  }
  
$return.= $parts[$length];
  return 
$return;

Asterixus ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
str_replace php übergehe das erste vorkommen, str_replace nur erstes vorkommen, preg_replace php, preg_replace \[en]\, preg_replace de, preg_replace, preg_replace()

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:22 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum