Wie ersetze ich bestimmte Teile meiner Saite?

Lesezeit: 12 Minuten

Wie ersetze ich bestimmte Teile meiner Saite
Stian

Wie kann ich einen bestimmten Teil meiner Saite durch einen anderen ersetzen?

Eingabezeichenfolge:

"Hello, my name is Santa"

Wie kann ich alles ändern a‘s in meinem String mit etwas anderem?

Ich glaube, ich brauche eine foreach Schleife, aber ich bin mir nicht sicher, wie ich sie verwenden soll.

  • richtig.. und es sollte auch das erste Ergebnis sein 🙂

    – mishu

    17. November 2011 um 7:56 Uhr

  • Auch die Abwertung des ereg_ Familie bedeutet nicht, dass Sie Regex in PHP nicht verwenden können. Dort ist der PCRE (preg_) Familie. Die kleinen Unterschiede sollten Sie nicht davon abhalten, es zu verwenden.

    – kappa

    17. November 2011 um 7:58 Uhr


  • @Madmartigan: Nicht jeder findet HandbĂĽcher ansprechend. Obwohl dies wahrscheinlich ein Duplikat von einer Milliarde Fragen zu Stackoverflow ist, ist es keine schlechte Frage fĂĽr eine Q&A-Site, oder?

    – zrwan

    17. November 2011 um 15:06 Uhr

  • @zvran: Wenn ich den Fragentitel (buchstäblich) in Google kopieren / einfĂĽgen und endgĂĽltige Ergebnisse erhalten kann, wĂĽrde ich sagen, dass das OP seine Ressourcen noch nicht erschöpft hat. Einerseits ist es schlecht fĂĽr die Seite, mehr Unordnung zu haben (doppelte Fragen, die leicht durch einfache Recherche beantwortet werden können), andererseits ist es möglicherweise gut fĂĽr den nächsten Typ, der tut recherchieren Sie ein wenig (mehr Ergebnisse). Während das PHP-Handbuch vielleicht nicht „ansprechend“ ist, ist es sicherlich eine Autorität und die erste Stelle, an der Sie nach einfachen Fragen wie dieser suchen sollten. Wie ich sehe, wurde mein Kommentar gezappt, aber er enthielt einen wertvollen Link.

    – Wesley Murch

    17. November 2011 um 17:39 Uhr


1646932453 631 Wie ersetze ich bestimmte Teile meiner Saite
zrwan

strtr ($str, array ('a' => '<replacement>'));

Oder um deine Frage genauer zu beantworten:

strtr ("Hello, my name is Santa", array ('a' => '<replacement>'));

  • Wird dies alle “a”-Zeichen in einer Zeichenfolge ersetzen?

    – Stjan

    17. November 2011 um 7:55 Uhr

  • und ich muss $str in die Variable i mit der Zeichenfolge ändern, die ich ändern möchte, richtig?

    – Stjan

    17. November 2011 um 8:02 Uhr

  • Ja, $str ist die zu verarbeitende Zeichenfolge, ich habe die Antwort geändert, um dies widerzuspiegeln.

    – zrwan

    17. November 2011 um 8:14 Uhr

1646932453 226 Wie ersetze ich bestimmte Teile meiner Saite
Rizier123

Suchen & Ersetzen

Es gibt ein paar verschiedene Funktionen/Methoden, um einen bestimmten Teil einer Zeichenfolge durch etwas anderes zu ersetzen, alle mit ihren eigenen Vorteilen.

##str_replace() Methode (binär sicher; Groß-/Kleinschreibung beachten)

Argumente

gemischt str_replace ( gemischt $suche gemischt $ersetzen gemischt $subjekt [, int &$count ] )

str_replace() hat 3 erforderliche Argumente, wie Sie in der obigen Definition mit der richtigen Reihenfolge sehen können, die alle einen String als auch ein Array als Argument annehmen können!

Suchen & Ersetzen

  • suchen(string) UND ersetzen(string) → Ersetzt den Suchstring durch den Ersetzungsstring.

  • suchen(array) UND ersetzen(string) → Ersetzt alle Suchelemente durch die Ersetzungszeichenfolge.

  • suchen(string) UND ersetzen(array) → Wirft Ihnen einen Hinweis ein: „Hinweis: Array-zu-String-Konvertierung“, weil ein Ersatz-Array fĂĽr nur einen Suchstring keinen Sinn macht, so it versucht um das Array in einen String umzuwandeln.

  • Suchen (Array) UND Ersetzen (Array) → Ersetzt jedes Suchelement durch das entsprechende Ersetzungselement (SchlĂĽssel werden ignoriert!).

  • suchen (mehr Elemente) UND ersetzen (weniger Elemente) → Ersetzt jedes Suchelement durch das entsprechende Ersetzungselement (FĂĽr die fehlenden Ersetzungselemente wird ein leerer String verwendet).

  • suchen (weniger Elemente) UND ersetzen (mehr Elemente) → Ersetzt jedes Suchelement durch das entsprechende Ersetzungselement (Nicht benötigte Ersetzungselemente werden ignoriert).

Fach

  • Betreff (Zeichenfolge) → Die Ersetzung wird fĂĽr die betreffende Zeichenfolge durchgefĂĽhrt.

  • Thema (Array) → Die Ersetzung erfolgt fĂĽr jedes Array-Element.

Code

echo str_replace("search", "replace", "text search text");
echo str_replace(["t", "a"], "X", "text search text");
echo str_replace("search", ["replace1", "replace2"], "text search text");
echo str_replace(["a", "c"], ["X", "Y"], "text search text");

Ausgabe

text replace text
XexX seXrch XexX
Notice: Array to string conversion
text seXrYh text

Anmerkungen

  1. Erwischt!

Wichtig zu wissen ist das str_replace() arbeitet von links nach rechts des Arrays. Dies bedeutet, dass es möglich ist, einen Wert zu ersetzen, den Sie bereits ersetzt haben. Zum Beispiel:

    echo str_replace(array("a", "b"), array("b", "c"), "aabb");
    //Probably expected output: bbcc
    //Actual output:            cccc
  1. GroĂź- und Kleinschreibung wird nicht beachtet

Wenn Sie die Groß- und Kleinschreibung bei der Suche unempfindlich machen möchten, können Sie verwenden str_ireplace() (Beachten Sie die i für Fall-ichunempfindlich).

  1. Mehrdimensionales Array

str_replace()/str_ireplace() funktioniert NICHT fĂĽr mehrdimensionale Arrays. Sieh dir das an manueller Kommentar fĂĽr eine solche Umsetzung. Kann man natĂĽrlich auch ersetzen str_replace() mit str_ireplace() fĂĽr case-insensitive.

Wenn Sie alles zusammenfügen und eine Funktion erstellen möchten, die auch für mehrdimensionale Arrays ohne Berücksichtigung der Groß- und Kleinschreibung funktioniert, können Sie Folgendes tun:

<?php 
function str_ireplace_deep($search, $replace, $subject) 
{ 
if (is_array($subject)) 
{ 
    foreach($subject as &$oneSubject) 
        $oneSubject = str_ireplace_deep($search, $replace, $oneSubject); 
    unset($oneSubject); 
    return $subject; 
} else { 
    return str_ireplace($search, $replace, $subject); 
} 
} 
?>

##strtr() Methode (50 % binär sicher; Groß-/Kleinschreibung beachten)

Argumente

Zeichenfolge strtr ( Zeichenfolge $str Saite $von Saite $zu )

Zeichenfolge strtr ( Zeichenfolge $str Reihe $replace_pairs )

Die Funktion benötigt entweder 3 Argumente mit einer from- und to-Zeichenfolge oder 2 Argumente mit einem Ersatzarray array("search" => "replace" /* , ... */)die Sie alle in der obigen Definition mit der richtigen Reihenfolge sehen können.

2 Argumente

Es beginnt, den längsten Schlüssel durch den entsprechenden Wert zu ersetzen, und tut dies, bis es alle ersetzt hat key => value Paare. In diesem Fall ist die Funktion binär sicher, da sie den gesamten Schlüssel/Wert verwendet.

3 Argumente

Es ersetzt das from-Argument durch das to-Argument im Betreff Byte für Byte. Es ist also nicht binär sicher!

Wenn die from- und to-Argumente ungleiche Länge haben, stoppt die Ersetzung, wenn sie das Ende der kürzeren Zeichenfolge erreicht.

Fach

Es akzeptiert kein Array als Subjekt, sondern nur einen String.

Code

echo strtr("text search text", "ax", "XY");;
echo strtr("text search text", ["search" => "replace"]);

Ausgabe

teYt seXrch teYt
text replace text

Anmerkungen

  1. Erwischt!

Im Gegensatz zu str_replace(), strtr() ersetzt NICHT ersetzte Saiten. Als Beispiel:

    echo strtr("aabb", ["a" => "b", "b" => "c"]);
    //If expecting to replace replacements: cccc
    //Actual output:                        bbcc

Auch wenn Sie mehrere Dinge durch dieselbe Zeichenfolge ersetzen möchten, können Sie diese verwenden array_fill_keys() um Ihr Ersatzarray mit dem Wert zu füllen.

  1. GroĂź- und Kleinschreibung wird nicht beachtet

strtr() ist NICHT case-insensitive NOCH gibt es eine case-insensitive äquivalente Funktion. Sieh dir das an manueller Kommentar für eine Implementierung ohne Berücksichtigung der Groß-/Kleinschreibung.

  1. Mehrdimensionales Array

strtr() tut dagegen str_replace() Funktioniert NICHT mit Arrays als Subjekt, also funktioniert es auch NICHT mit mehrdimensionalen Arrays. Sie können natürlich den obigen Code aus verwenden str_replace() für mehrdimensionale Arrays und verwenden Sie es einfach mit strtr() oder die Umsetzung von stritr().

Wenn Sie alles zusammenfügen und eine Funktion erstellen möchten, die auch für mehrdimensionale Arrays ohne Berücksichtigung der Groß- und Kleinschreibung funktioniert, können Sie Folgendes tun:

<?php
if(!function_exists("stritr")){
function stritr($string, $one = NULL, $two = NULL){
/*
stritr - case insensitive version of strtr
Author: Alexander Peev
Posted in PHP.NET
*/
    if(  is_string( $one )  ){
        $two = strval( $two );
        $one = substr(  $one, 0, min( strlen($one), strlen($two) )  );
        $two = substr(  $two, 0, min( strlen($one), strlen($two) )  );
        $product = strtr(  $string, ( strtoupper($one) . strtolower($one) ), ( $two . $two )  );
        return $product;
    }
    else if(  is_array( $one )  ){
        $pos1 = 0;
        $product = $string;
        while(  count( $one ) > 0  ){
            $positions = array();
            foreach(  $one as $from => $to  ){
                if(   (  $pos2 = stripos( $product, $from, $pos1 )  ) === FALSE   ){
                    unset(  $one[ $from ]  );
                }
                else{
                    $positions[ $from ] = $pos2;
                }
            }
            if(  count( $one ) <= 0  )break;
            $winner = min( $positions );
            $key = array_search(  $winner, $positions  );
            $product = (   substr(  $product, 0, $winner  ) . $one[$key] . substr(  $product, ( $winner + strlen($key) )  )   );
            $pos1 = (  $winner + strlen( $one[$key] )  );
        }
        return $product;
    }
    else{
        return $string;
    }
}/* endfunction stritr */
}/* endfunction exists stritr */

function stritr_deep($string, $one = NULL, $two = NULL){
if (is_array($string)) 
{ 
    foreach($string as &$oneSubject) 
        $oneSubject = stritr($string, $one, $two); 
    unset($oneSubject); 
    return $string; 
} else { 
    return stritr($string, $one, $two); 
} 

}
?>

##preg_replace() Methode (binär sicher; Groß-/Kleinschreibung beachten)

Argumente

gemischt preg_replace ( gemischt $Muster gemischt $Ersatz gemischt $subjekt [, int $limit = -1 [, int &$count ]])

preg_replace() hat 3 erforderliche Parameter in der oben gezeigten Reihenfolge. Jetzt können alle 3 einen String als auch ein Array als Argument nehmen!

Suchen & Ersetzen

  • suchen(string) UND ersetzen(string) → Ersetzt alle Ăśbereinstimmungen der Such-Regex durch die Ersetzungszeichenfolge.

  • suchen(array) UND ersetzen(string) → Ersetzt alle Ăśbereinstimmungen jeder Suchregex durch die Ersetzungszeichenfolge.

  • suchen(string) UND ersetzen(array) → Wirft Ihnen eine Warnung aus: „Warnung: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array“, weil ein Ersatz-Array fĂĽr nur eine Such-Regex keinen Sinn macht.

  • Suchen (Array) UND Ersetzen (Array) → Ersetzt alle Ăśbereinstimmungen jeder Suchregex durch das entsprechende Ersetzungselement (SchlĂĽssel werden ignoriert!).

  • suchen (mehr Elemente) UND ersetzen (weniger Elemente) → Ersetzt alle Ăśbereinstimmungen jeder Suchregex durch das entsprechende Ersetzungselement (FĂĽr die fehlenden Ersetzungselemente wird ein leerer String verwendet).

  • suchen (weniger Elemente) UND ersetzen (mehr Elemente) → Ersetzt alle Ăśbereinstimmungen jeder Suchregex durch das entsprechende Ersetzungselement (Nicht benötigte Ersetzungselemente werden ignoriert).

Fach

  • Betreff (Zeichenfolge) → Die Ersetzung wird fĂĽr die betreffende Zeichenfolge durchgefĂĽhrt.

  • Thema (Array) → Die Ersetzung erfolgt fĂĽr jedes Array-Element.

Bitte beachten Sie noch einmal: Die Suche muss ein regulärer Ausdruck sein! Das bedeutet, dass Trennzeichen benötigt werden und Sonderzeichen maskiert werden müssen.

Code

echo preg_replace("/search/", "replace", "text search text");
echo preg_replace(["/t/", "/a/"], "X", "text search text");
echo preg_replace("/search/", ["replace1", "replace2"], "text search text");
echo preg_replace(["a", "c"], ["X", "Y"], "text search text");

Ausgabe

text replace text
XexX seXrch XexX
Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
text seXrYh text

Anmerkungen

  1. Erwischt!

Gleich wie str_replace(), preg_replace() arbeitet von links nach rechts des Arrays. Dies bedeutet, dass es möglich ist, einen Wert zu ersetzen, den Sie bereits ersetzt haben. Zum Beispiel:

    echo preg_replace(["/a/", "/b/"], ["b", "c"], "aabb");
    //Probably expected output: bbcc
    //Actual output:            cccc
  1. GroĂź- und Kleinschreibung wird nicht beachtet

Da das Suchargument ein regulärer Ausdruck ist, können Sie einfach die übergeben flag i für die Suche ohne Berücksichtigung der Groß-/Kleinschreibung.

  1. Mehrdimensionales Array

preg_replace() funktioniert NICHT fĂĽr mehrdimensionale Arrays.

  1. RĂĽckverweis

Seien Sie sich bewusst, dass Sie verwenden können \\n/$n als Rückverweis auf Ihre einfangenden Gruppen der Regex. Woher 0 ist das gesamte Spiel und 1-99 für Ihre Fanggruppen.

Auch wenn auf die Rückwärtsreferenz unmittelbar eine Zahl folgt, müssen Sie diese verwenden \${n}.

  1. Ersatz / “Der Modifizierer /e ist veraltet”

Der Ersatz ein preg_replace() Callback-Funktionen können nicht als Ersatz verwendet werden. Sie mĂĽssen also verwenden preg_replace_callback(). Dasselbe gilt, wenn Sie den Modifikator verwenden e und erhalten Sie “Veraltet: preg_replace(): Der Modifikator /e ist veraltet, verwenden Sie stattdessen preg_replace_callback”. Siehe: Ersetze den Modifikator preg_replace() durch preg_replace_callback

Wenn Sie alles zusammenfügen und eine Funktion erstellen möchten, die auch für mehrdimensionale Arrays ohne Berücksichtigung der Groß- und Kleinschreibung funktioniert, können Sie Folgendes tun:

<?php
function preg_replace_deep($search, $replace, $subject) 
{ 
if (is_array($subject)) 
{ 
    foreach($subject as &$oneSubject) 
        $oneSubject = preg_replace_deep($search, $replace, $oneSubject); 
    unset($oneSubject); 
    return $subject; 
} else { 
    return preg_replace($search, $replace, $subject); 
} 
} 
?>

##Schleifen while / for / foreach Methode (NICHT binär sicher; Groß-/Kleinschreibung beachten)

Jetzt können Sie neben all diesen Funktionen natürlich auch eine einfache Schleife verwenden, um die Zeichenfolge zu durchlaufen und jede zu ersetzen search => replace Paar, das Sie haben.

Dies wird jedoch viel komplexer, wenn Sie dies binär sicher, ohne Berücksichtigung der Groß- und Kleinschreibung und für mehrdimensionale Arrays tun, als nur die obigen Funktionen zu verwenden. Daher werde ich hier keine Beispiele einfügen.


Betroffene Zeichenfolge

Im Moment führen alle oben gezeigten Methoden die Ersetzung über die gesamte Zeichenfolge durch. Aber manchmal möchten Sie etwas nur für einen bestimmten Teil Ihrer Saite ersetzen.

Dafür wollen/können Sie wahrscheinlich verwenden substr_replace(). Oder eine andere gängige Methode ist zu verwenden substr() und wenden Sie die Ersetzung nur auf diesen bestimmten Teilstring an und setzen Sie den String danach zusammen. Natürlich könnten Sie auch Ihre Regex ändern oder etwas anderes tun, um die Ersetzung nicht auf den gesamten String anzuwenden.

1646932453 390 Wie ersetze ich bestimmte Teile meiner Saite
NekaraNef

str_replace reicht fĂĽr einfache Ersetzungsjobs (wie das Ersetzen eines einzelnen Buchstabens), aber die Verwendung von preg_replace wird allgemein empfohlen (wenn Sie etwas flexibleres oder vielseitigeres wollen), weil es flexibel und vielseitig ist. Und da das ‘a’ nur ein Beispiel ist …:

$String = preg_replace('/<string>/','<replacement>',$String);

Oder wenn Sie mehrere Ersetzungen auf einmal wĂĽnschen:

$String = preg_replace(array('/<string 1>/','/<string 2>/'),array('<replacement 1>','<replacement 2>'),$String);

preg_replace kann leider ziemlich schwierig zu verwenden sein. Ich empfehle folgende LektĂĽre:
http://php.net/manual/en/function.preg-replace.php
http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html

Wenn Sie sich entscheiden, str_replace() zu verwenden, und Ihr Ersatz zwischen Groß- und Kleinschreibung unterscheiden muss, benötigen Sie str_ireplace().

  • Machen nicht Verwenden Sie reguläre AusdrĂĽcke fĂĽr so einfache Aufgaben wie das Ersetzen eines einzelnen Buchstabens.

    – Str

    17. November 2011 um 8:14 Uhr

  • Welcher Teil von “str_replace reicht fĂĽr einfache Ersatzjobs” und “da das ‘a’ nur ein Beispiel ist …” ist unleserlich oder schwer verständlich?

    – NekaraNef

    17. November 2011 um 8:15 Uhr


  • Weil du falsch liegst. preg_replace() ist nicht allgemein geraten. Es immer hängt vom Anwendungsfall ab. Beide Beispiele können problemlos mit str_replace() ausgefĂĽhrt werden, anstatt reguläre AusdrĂĽcke zu verwenden.

    – Str

    17. November 2011 um 8:17 Uhr

  • Ja, beide Beispiele können einfach mit str_replace() durchgefĂĽhrt werden. Die Sache ist, sie sind BEISPIELE. Was bringt es, ein schwer verständliches Beispiel zu schreiben, indem man gleich Regex zeigt? Das schreckt die Leute einfach ab. Aber ich formuliere um, um Sie zu belustigen: preg_replace wird im Allgemeinen empfohlen, es sei denn, Sie suchen nach einem WIRKLICH EINFACHEN UND LEICHTEN Ersatz, den die meisten Programmierer tatsächlich selten benötigen.

    – NekaraNef

    17. November 2011 um 8:21 Uhr


  • Was bringt es, preg_replace() anzuzeigen ĂĽberhaupt Wann kann das fragliche Problem mit str_replace() gelöst werden? “brauchen die meisten Programmierer eigentlich selten”? Irgendeine Referenz fĂĽr diese Behauptung?

    – Str

    17. November 2011 um 9:06 Uhr

Wie ersetze ich bestimmte Teile meiner Saite
sivi

Dies kann auch ohne eine der PHP-String-Funktionen funktionieren, hier ändern Sie Ihr ‘a’ in ‘&’ kaufmännisches Und-Zeichen:

for ($i=0; $i<strlen($str); $i++){
    if ($str[$i] == 'a'){
        $str[$i] = '&';
    }
}
echo $str;

1646932454 234 Wie ersetze ich bestimmte Teile meiner Saite
Sandeep Sherpur

Verwenden Sie die Funktion preg_replace()

$text="this is the old word";

echo $text;
echo '<br>';

$text = preg_replace('/\bold word\b/', 'NEW WORD', $text);

echo $text;

988540cookie-checkWie ersetze ich bestimmte Teile meiner Saite?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy