• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Hilfe bei Regex benötigt

Status
Für weitere Antworten geschlossen.
A

Alti

Guest
Hallo. Schreibe grad ein Plugin für Wordpress.
Habe jedoch ein Problem mit einer Funktion und den darin enthalteten Regex:
So sieht meine Funktion aus:
PHP:
function bbcode($content) {
    $content = preg_replace("!\[p hp\](.*)\[/p hp\]!isU",
    highlight_string("<?php $1 ?>", TRUE),$content);

    return $content;
    }
wenn ich die funktion nun wie folgt aufrufe:
PHP:
$text = "Hallo, oder phpstyle: [p hp]<?php echo "Hello World" ?>[/p hp]";
bbcode($text);
Bekomme ich jedoch nur folgende Ausgabe:
PHP:
<?php $1 ?>
Ich musste in den Codes meine BBcodes trennen, da sonst der Parser ein wenig verrückt spielt.

Wie muss ich denn die Variable der Regex sonst aufrufen?

Bitte um Hilfe
Alti
 
Zuletzt bearbeitet von einem Moderator:
IUst ja auch kein Wunder. Du definierst eine Variable "<?php $1 ?>", und mit dieser wird der Regex ausgetauscht. Das ganze sieht so warscheinlich auch logischer aus:

PHP:
<?php
function bbcode($content) {
    $content = preg_replace("!\[php\](.*)\[/php\]!isU",
    highlight_string("<?php $1 ?>", TRUE),$content);

    return $content;
    }
?>

Das ganze kannst du verhindern, indemdu nur "$1" reinschreibst.

btw: highlight_string() erwartet keinen zweiten Parameter, eigentlich müsste da ein Fehler ausgegeben worden sein. [phpnet]highlight_string[/phpnet]

Zudem ist das hier:

Code:
[noparse]$text = "Hallo, oder phpstyle: [php]<?php echo "Hello World" ?>[/php]";
bbcode($text);[/noparse]
Auch schwachsinn. Was soll das <?php ?> dadrin?
 
Nun ja, das soll der PHP code sein, der gehighlightet werden soll. Er wird ja später vom User übergeben.
Wenn ich bei Highlight String nur $1 angebe, kommt folgender Fehler:
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /www/usersites/a-f/alti/pub/blog/wp-content/plugins/bbcode.php on line 15

Line 15:
highlight_string($1),$content);
Was ja auch logisch ist, da Variablen nicht mit Zahlen beginnen dürfen. Wenn ich die Var in Anführungszeichen schreibe, wird auch nur $1 ausgegeben.

Ich weiß nicht weiter.
Bin auf weitere Hilfen gespannt.
 
ich an deiner stelle würde ja erstmal nach
Code:
"[php]<?php" oder "[php]<?" dan nach "?>[/php]"
fragen und danach nach
PHP:
 und
denn sonst hättest du z.b. bei mir immer
<?php<?php ?>?>
stehen ^^
 
Ist ja klar, dass ich dass dann noch mache, mir gehts aber erstmal darum, dass das Prinzip funktioniert, was es aber nicht tut.
 
Ist ja klar, dass ich dass dann noch mache, mir gehts aber erstmal darum, dass das Prinzip funktioniert, was es aber nicht tut.
Du brauchst den Modifikator e. Ansonsten würde auch noch preg_replace_callback gehen..
Aber hier ein beispiel für e:
PHP:
$content = preg_replace('!\[php\](.*)\[/php\]!eisU', 'highlight_string("${1}")', $content);
Gruß
/E:
Der Modifikator e bewirkt, dass der string des 2. parameters als php code ausgeführt wird.
mehr infos hier:
http://de.php.net/manual/de/reference.pcre.pattern.modifiers.php
 
Ich konnte es nun so lösen:
PHP:
function return_code($a) {
	$a[1] = trim($a[1]);
	return highlight_string($a[1],true);
}	
function bbcode($text) {
	    $text = preg_replace_callback ("!\[php\](.*)\[/php\]!isU",'return_code',$text);
		return $text;
}
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben