php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.10.2005, 04:16  
Erfahrener Benutzer
 
Registriert seit: 02.12.2003
Beiträge: 269
phpfortgeschrittener
phpfortgeschrittener eine Nachricht über ICQ schicken phpfortgeschrittener eine Nachricht über AIM schicken phpfortgeschrittener eine Nachricht über MSN schicken phpfortgeschrittener eine Nachricht über Yahoo! schicken
Standard preg_replace gibt nur \1 zurück

hallo zusammen,
ich habe eine kleine klasse gebaut, die mir den code in eine tabelle schreibt, die zeilen nummeriert und den code highlightet...
nun kam ich zu folgendem ergebnis:
ich habe gleich nach anfang der funktion get_codetable einmal echo $code; gemacht, um zu sehen, was der funktion im preg_replace mitgegeben wurde.
leider kam dabei nur \1 raus.
hier der code:
Code:
$content = preg_replace ("/\[code\](.+?)\[\/code\]/isU", $this->get_codetable("\\1"), $content);
was ist daran falsch?
danke im vorraus.
mfg,
WasserDragoon.
phpfortgeschrittener ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.10.2005, 04:36  
Gast
 
Beiträge: n/a
Standard

Wann wird bei Deiner Konstruktion $this->get_codetable("\\1") ausgewertet?
Direkt vor dem Aufruf von preg_replace.; einmal.
Das willst Du wohl nicht. Du willst, dass es bei jedem "Treffer" des Suchmusters ausgewertet wird.
Also als Zeichenkette übergeben wie bei eval. Und dann bei http://php.net/pcre unter Modifikatoren denjenigen raussuchen, der den zweiten Parameter als php Code auswertet.
 
Alt 25.10.2005, 09:56  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Das ist die falsche rangehensweise, du kannst die "Variablen" \1 die preg_replace dir liefert nicht für eine Funktions-Argument verwenden! Glaube ich zumindest. Mache lieber preg_match und ersetze die matches gezielt durch deine codetable().

Wäre zumindest mein Vorschlag.
Zergling-new ist offline  
Alt 25.10.2005, 12:30  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

anstatt dem e-modifier lieber preg_match_callback verwenden, gab auch mal nen thread hier dazu warum, aber den find ich graud auf die schnelle ned.

mfg
robo47
robo47 ist offline  
Alt 25.10.2005, 13:35  
Erfahrener Benutzer
 
Registriert seit: 02.12.2003
Beiträge: 269
phpfortgeschrittener
phpfortgeschrittener eine Nachricht über ICQ schicken phpfortgeschrittener eine Nachricht über AIM schicken phpfortgeschrittener eine Nachricht über MSN schicken phpfortgeschrittener eine Nachricht über Yahoo! schicken
Standard

ok aber ich hatte vorher mal einen ähnlichen code gefunden, der ging auch in dem schema und hat auch geklappt...
es sucht ja alle [ code]...[/code ]'s und dann ersetzt er die mit get_codetable das hört sich doch nit falsch an.
mfg,
WasserDragoon.
phpfortgeschrittener ist offline  
Alt 25.10.2005, 14:32  
Gast
 
Beiträge: n/a
Standard

Doch Zergling, kann er.....

$content = preg_replace ("/\[code\](.+?)\[\/code\]/isU", '$this->get_codetable(\'\\1\')', $content);

So müsste es funktionieren
 
Alt 25.10.2005, 15:02  
Gast
 
Beiträge: n/a
Standard

Fast.
PHP-Code:
<?php

$content 
preg_replace ("/\[code\](.+?)\[\/code\]/ise"'$this->get_codetable(\'\\1\')'$content);

// Oder mit pcre_callback_replace

$content preg_replace_callback("/\[code\](.+?)\[\/code\]/is", array($this'get_codetable'), $content);
Für callback_replace muss get_codetable nur so umgeschrieben werden, dass es das zweite Element des übergebenen Feldes benutzt.
 
Alt 25.10.2005, 15:03  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Krass, wußte ich nicht. Danke für den Hinweis (obwohl ichs unübersichtlich finde, dann lieber ein mehrzeiler
Zergling-new ist offline  
 


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
php \\1, php \\\1\, preg_replace einmal

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:48 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.