[PHP] String durchsuchen & ersetzen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von MusicAngel, 8. Juli 2010 .

  1. 8. Juli 2010
    String durchsuchen & ersetzen

    Hallo,
    ich als PHP-Noob hab folgendes Problem:

    Ich habe einen String in dem mehrere (oder gar keine) bestimmte Strings vorkommen. Diese sollen nun rot geschrieben werden.

    Praktisches Beispiel:
    PHP:
    $comment  "Dies ist ein Text. >>1857 Apropos, ich finde dein Bild schön. >>1850 deins ist allerdings hässlich."
    Die Strings ">>1857" und ">>1850" sollen nun irgendwie mit PHP gefunden und ersetzt werden (mit z.b. "[font color="red"]>>1857[/font]").

    Was zu bemerken ist: die strings die ich suche sind immer so aufgebaut: ">>" + integer


    Vielen Dank
     
  2. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    Mal fixx zusammen geschraubt. Sieht auch so aus als wenn es gehen würde ...

    PHP:
    <? php
        $text 
    "Dies ist ein Text. >>1857AVD Apropos, ich finde dein Bild schön. >>1850 deins ist allerdings hässlich." ;
        echo 
    'Alter Text: ' . $text . "<br />" ;
        
    $text  preg_replace ( '@([>>>0-9]+)@sim' '<strong style="color:red">$1</strong>' $text );
        echo 
    'Neuer Text: ' . $text
    ?>
    LG
     
  3. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    Huhu,
    Vielen Dank, das funktioniert

    Allerdings habe ich ein neues Problem bekommen: Das Script soll jetzt zuerst in einem Array nachschauen, ob die bestimmte Nummer (>>Nummer) True oder False zugewiesen ist. Dementsprechend soll es grün oder rot sein.

    Ich probier das mal, melde mich hier wenn es nicht geklappt hat.

    PS: Es dürfen nur genau zwei ">>" vor dem int sein
     
  4. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    zu problem 1 und 2:
    PHP:
    <? php

    $num 
    = array( 1857  =>  true 1850  =>  false );

    $string  'Dies ist ein Text. >>1857AVD Apropos, ich finde dein Bild schön. >>1850 deins ist allerdings hässlich.' ;
    $string  preg_replace ( '/>>(\d+)/e' '\'<strong style="color:\' . ($num[\\1] ? \'green\' : \'red\') . \';">\\1</strong>\'' $string );
    print 
    $string ;
    sollte gehen
     
  5. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    Huhu,
    Jop. Das klappt auch einwandfrei. Allerdings will ich noch einige Anpassungen vornehmen - könnte man das ganze nicht anders machen so nach dem Schema:

    1. alle Stellen in dem String finden
    2. alle Stellen in ein Array packen
    3. // einige sachen machen (z.B. Datenbank-Verbindung herstellen, je nach Fall...)
    4. alle Stellen wieder modifiziert zurückpacken
    5. String ausgeben
     
  6. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    PHP:
    <? php

    $num 
    = array( 1857  =>  true 1850  =>  false );

    $string  'Dies ist ein Text. >>1857AVD Apropos, ich finde dein Bild schön. >>1850 deins ist allerdings hässlich.' ;
    $string  preg_replace ( '/>>(\d+)/e' 'handle_number(\\1)' $string );
    print 
    $string ;

    // ---------------

    function  handle_number ( $number ) {
        
    //mach was mit $number
        
        //z.b.
        
        
    global  $num ;
        
        
    $color  = (!empty( $num [ $number ])) ?  'green'  'red' ;
        
    $number  sprintf ( '<strong style="color:%s;">%u</strong>' $color $number );
        
        
    //einfach zurückgeben
        
    return  $number ;
    }
    wenn du die nummern mit ner db abgleichen willst, wäre es besser alle nummern zuvor zu extrahieren um nur das nötigste aus der db zu laden. das geht so:

    PHP:
    <? php
    $numbers 
    = array();
    preg_match_all ( '/>>(\d+)/' $string $numbers );
    $numbers  $numbers [ 1 ];  //alle nummern im text befinden sich nun in $numbers
     
  7. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    Vielen vielen Dank Klappt alles super!

    Hätte bloss noch eine Frage: Es sollen nicht nur Numbern, sondern alle Zeichen den Check durchlaufen (also die Stelle
    PHP:
    $comment  preg_replace ( '/>>(\d+)/e' 'handle_number(\\1)' $comment );
    PHP:
    '/>>(\d+)/e'
    ) muss geändert werden. Wie mache ich das nur? :O




    Das grün markierte soll z.b. erfasst werden:

    Code:
    Dies ist ein Text.
    [COLOR="Lime"]>>Dieser Text handelt um viele Sachen. Kuchen.[/COLOR]
    Jawoll, sehr interessant.

    edit: Hab immerhin schon rausgefunden wie er das erste Wort nimmt, nicht aber den Text bis Zeilenumbruch / Blockquote (wenn es keinen Zeilenumbruch hat wirds per [/blockquote] beendet)
     
  8. 9. Juli 2010
    AW: String durchsuchen & ersetzen

    Was hast du denn genau vor??? Willst du Success und Error Meldungen in deinen Text einbauen?

    Ich glaube du machst es dir viel zu kompliziert, auch wenn ich nicht mal verstehe worauf du hinaus willst.

    Wenn du nämlich nur Erfolgs- und Fehlermeldungen einbauen willst, geht das auch einfacher.
    Wenn du Platzhalter willst, wie in einem Template -> Template Engine mit Start und Stopp Zeichen (Bsp: >>Platzhalter das wird ersetzt !! <<)

    Nicht das die Leute dir hier ewig helfen und das ganze völlig ausartet und sinnlos ist
     
  9. 18. Juli 2010
    AW: String durchsuchen & ersetzen

    Mal eben OffTopic:

    Wieso siehst du dir das ganze nicht einfach auf selfhtml oder CO an?
    PHP: preg_match - Manual

    wenn hier alle deine schnipsel coden bringts dir ja nix...
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.