preg_replace(,,,1) nur einmal ersetzen, aber...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace(,,,1) nur einmal ersetzen, aber...

    Hallo,

    ich möchte bestimmte Wörter in einem Text ersetzen. Damit das schnell geht, dachte ich daran search und replace in ein Array zu setzen. Jetzt habe ich aber replace Werte die für search mehrmals zutreffen.

    Also:

    PHP-Code:
    <?php

    $text 
    htmlentities('

    Hallo,

    das ist ein Text in dem viele Wörter vorkommen.

    Das Wort Tuning wird hierbei mit einer Box versehen.

    Mal sehen wie der Text sich so macht und die Box natürlich auch.

    Man kann tuning auch klein schreiben. Auch Tuningteile oder den tuningteilen oder tuningteile? Oder Tuningzubehör?

    Weiterhin gibts noch Felgen und Reifen bei ATU zu kaufen.

    Gruß
    Marc'
    );

    $search = array(
        
    '#(^|[\n ])(tuning)([\w&;]*)(^[\t <\n\r\]\[])*#is',
        
    '#(^|[\n ])(tuning)([\w&;]*)(^[\t <\n\r\]\[])*#is',
        
    '#(^|[\n ])(tuning)([\w&;]*)(^[\t <\n\r\]\[])*#is',
        
    '#(^|[\n ])(felgen)([\w&;]*)(^[\t <\n\r\]\[])*#is',
        
    '#(^|[\n ])(reifen)([\w&;]*)(^[\t <\n\r\]\[])*#is',
        
    '#(^|[\n ])(atu)([\w&;]*)(^[\t <\n\r\]\[])*#is',
    );

    $replace = array(
        
    '\\1<b>\\2\\3</b> <u>H+M Tuning</u>',
        
    '\\1<b>\\2\\3</b> <u>D&W Tuning</u>',
        
    '\\1<b>\\2\\3</b> <u>motoso.de</u>',
        
    '\\1<b>\\2\\3</b> <u>Felgen-Billiger.de</u>',
        
    '\\1<b>\\2\\3</b> <u>ReifenDirekt.de</u>',
        
    '\\1<b>\\2\\3</b> <u>A.T.U Auto-Teile-Unger</u>',
    );

    $text preg_replace($search$replace$text1);

    echo(
    nl2br($text));

    ?>
    Jetzt ist es so, dass die Wörter teilweise auch im Replace selber drin sind und der nächste Schritt dann im Replace selbst ersetzt.

    Kann man das unterbinden? Oder sollte ich einen anderen Lösungsansatz suchen?

    Das Ergebnis kann man hier sehen, falls es jemanden interessiert:
    http://www.maxrev.de/test_infobox.php

    Gruß
    Marc

    EDIT: OK im Moment habe ich gefuscht. Ich habe die Leerzeichen gegen HTML Leerzeichen ersetzt. So replaced er im Ersetzten nicht mehr. Aber das ist natürlich nicht DIE Lösung. Ich finde aber nichts anderes. Also so sieht der Replace dann aus:
    PHP-Code:
    $replace = array(
        
    '\\1<b>\\2\\3</b> <u>H+M&nbsp;Tuning</u>',
        
    '\\1<b>\\2\\3</b> <u>D&W&nbsp;Tuning</u>',
        
    '\\1<b>\\2\\3</b> <u>motoso.de</u>',
        
    '\\1<b>\\2\\3</b> <u>Felgen-Billiger.de</u>',
        
    '\\1<b>\\2\\3</b> <u>ReifenDirekt.de</u>',
        
    '\\1<b>\\2\\3</b> <u>A.T.U&nbsp;Auto-Teile-Unger</u>',
    ); 
    EDIT2: Nach eifriger Überlegung denke ich, dass diese Lösung eigentlich die Schnellste sein müsste. Man könnte auch versuchen alle Wörter einzeln abzuarbeiten, aber das dürfte nicht so schnell sein wie diese Lösung. Also lassen wir es

    Gruß
    Zuletzt geändert von mgutt; 22.03.2007, 17:54.
    mein Honda Forum | meine Scripte
Lädt...
X