Willkommen in der Webstatt Zum Webstatt Blog und Stories
Dustwolf Dustwolf am 05.07.06 12:20

Also, ich stehe vor einem kleinen logischen Problem.
Und zwar teste ich grade mit highlight_string etc. herum, denn ich möchte aus einem Text per RegEx Textstellen heraussuchen und die durch Texte mit Syntaxmarkierungen ersetzen.

Im Klartext:

Ein langer Text enthält einige Codezeilen die jeweils mit [.php] und [./php] umklammert sind. Nun möchte ich per RegEx die Stellen raussuchen, den Inhalt highlighten udn dann wieder in den Text einfügen.

$text = preg_replace('#\[php\]((?U).*)\[\/php\]#s',
highlight_string('\\1'),
$text);


Das funktiniert schonmal nicht und mit:
preg_match_all('#\[php\]((?Ums).*)\[\/php\]#s', $text, $elemente, PREG_PATTERN_ORDER);
for ($i=0; $i<=count($elemente); $i++)
echo $i.'. '.highlight_string($elemente[1][$i]).'<br><br><br><br><br>';


Gibt er mir nur zwei oder drei der PHP-Codes aus und nichtmal die ersten, sondern das erste und zwei irgendwo aus der Mitte des Textes.
Zumal die Highlight-Befehle und show_source ja scheinbar sogar direkt ausgeben und nicht zurückgeben.

Aber es muss doch irgendwie machbar sein, das Forum hier kann das zB ja auch. Kann mir da einer helfen?

netcup.de Warum gibt es hier Werbung?
sili sili am 05.07.06 13:42

Du brauchst den e Modifier und den zweiten (in der deutschen Doku nicht erwähnten) Parameter von highlight_string ;)

$text = preg_replace('#\[php\]((?U).*)\[\/php\]#se',
"highlight_string('\\1', 1)",
$text);

(beachte, dass der Befehl in Anführungs- und Schlusszeichen gesetzt wurde)

edit: Hast du schon eine elegante Lösung für die restliche Formatierung - sprich: <p></p> um Text etc. - gefunden? Daran scheitere ich gerade kläglich. :(

Dustwolf Dustwolf am 05.07.06 14:07

Danke ersmtal. Ich habe gerade gesehen, dass der zweite Parameter ganz weit unten in den Anmerkungen von einem der User dort benutzt wird. :tired:


Die anderen Formatierungen spielen für mich keine Rolle, da ich die Texte über ein von mir geschriebenes Templatesystem ausgebe und die automatisch formatiert sind.
Ich brauchte halt nur für die Code-Stücke ne automatische Lösung für die Syntaxmarkierung, die nicht sofort ein Resultat ausgibt, sondern einfach die Ausgabe in eine Variable packt, damit ich diese an das Templatesystem übergeben kann. :D

Eine Frage zum Detail noch:

Quote
Anführungs- und Schlusszeichen


Wirklich Gänsefüsschen, oder nur die RegEx-typischen Begrenzer, also in meine Fall beispielsweise das Zeichen Raute (#)?

sili sili am 05.07.06 14:44

Quote
Original von Dustwolf
Eine Frage zum Detail noch:
[QUOTE]Anführungs- und Schlusszeichen


Wirklich Gänsefüsschen, oder nur die RegEx-typischen Begrenzer, also in meine Fall beispielsweise das Zeichen Raute (#)?[/quote]

Entweder hast du mich falsch verstanden oder ich habe keine Ahnung was du meinst ;-)
Der zweite Parameter von preg_replace muss in Anführungs- und Schlusszeichen oder Hochkommas und darf nicht einfach als Befehl dort stehen. Ein Beispiel dazu auch in der (englischsprachigen) Doku zu preg_replace().

Dustwolf Dustwolf am 05.07.06 14:53

Ja, OK, wir haben aneinander vorbei geredet. Hat sich aber erledigt, da du trotzdem auf meine Frage antworten konntest. :D

nuit nuit am 05.07.06 15:58

nur der vollständigkeit halber ;D
es gibt noch die funktion: preg_replace_callback wo er eine funktion aufruft, in deinem fall sähe das dann so aus:

function ersetze($treffer) {
return highlight_string($treffer[1],1);
}
preg_replace_callback('#\[php\]((?U).*)\[\/php\]#s',"ersetze",$text);


ist natürlich umständlicher ;) aber gut...für größere sachen, ist das die ideale funktion *fg*

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt