Skriptsprachen (PHP, Javascript, etc.) - Forum

Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.

Diskutieren Sie hier über die serverseitige Skriptsprachen PHP und Python und über dynamische Webseitenerstellung mit Javascript und Ajax.


podthepunk
Beiträge: 76

PN schreiben
Profil ansehen
User ist offline

preg_replace soll bestimmte Textpassagen ignorieren

Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von podthepunk podthepunk, am Wednesday den 16.04.2008 um 16:20:54

Hi,

ich würde gerne wissen, ob man preg_replace so verwenden kann, dass bestimmte Textpassagen ignoriert werden.

Aktuell:

 
HTML
1
$code = preg_replace ('#\[b\](.*?)\[\/b\]#si', '<strong>\\1</strong>', $code);

Jetzt möchte ich, dass Text zwischen [code] und [/code] von preg_replace unangetastet bleibt. (Sinn sollte klar sein)

danke
pod

Insgesamt 1 mal bearbeitet, zuletzt am 16.04.2008 um 16:21:57
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von Firebird  Firebird , am Wednesday den 16.04.2008 um 16:32:20

Einfach den Code zuerst ersetzen und zwar ersetzen durch zufällig generierte IDs, die wiederum die Keys eines Arrays darstellen, in dem du den Code zwischenspeicherst und zum Schluss wieder zurück ersetzt. (siehe preg_replace_callback)

Beispiele dafür gibt's zuhauf im alten Forum :)

Insgesamt 1 mal bearbeitet, zuletzt am 16.04.2008 um 16:32:52

podthepunk
Beiträge: 76

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von podthepunk podthepunk, am Wednesday den 16.04.2008 um 16:40:37

Also Code rausfiltern und später wieder einsetzen. Sollte nicht all zu schwer sein, dachte nur, es gäb eine "direkte" Lösung innerhalb von preg_replace.

Danke
pod

EDIT:

Geschrieben, eingebaut, (kurz) getestet und funktioniert:

 
HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function bb_callback_code ( $code )
{
    global $codeblocks;

    $code = $code[1];
    $code = str_replace ("<br>", "", $code);
    
    do
    {
        $code_id = rand(100000, 999999);
    }
    while ( array_key_exists ($code_id, $codeblocks) );
    
    $codeblocks[$code_id] = "\n".'<pre>' . $code . '</pre>'."\n";

    return '[codeblock=' . $code_id . ']';
}

function bb_callback_code_return ( $id )
{
    global $codeblocks;
    $code = $codeblocks[$id[1]];
    return $code;
}

$code = preg_replace_callback ('#\[code\](.*?)\[\/code\]#si','bb_callback_code', $code);
//restliche BB-Anweisungen
$code = preg_replace_callback ('#\[codeblock=(.*?)\]#si','bb_callback_code_return', $code);
?>
Insgesamt 3 mal bearbeitet, zuletzt am 16.04.2008 um 16:59:56

Benutzer gelöscht
Beiträge: 800

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von Benutzer gelöscht Benutzer gelöscht, am Wednesday den 16.04.2008 um 17:35:08

Anstatt deinem Rand: www.php.net/uniqid


podthepunk
Beiträge: 76

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von podthepunk podthepunk, am Wednesday den 16.04.2008 um 17:40:26

Danke, kann ich mir damit dann auch die do/while Schleife sparen? Vermutlich schon, oder?


Benutzer gelöscht
Beiträge: 800

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von Benutzer gelöscht Benutzer gelöscht, am Wednesday den 16.04.2008 um 18:03:03

Ja


podthepunk
Beiträge: 76

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von podthepunk podthepunk, am Wednesday den 16.04.2008 um 18:07:03

Danke, habs eingbaut.

 
HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
function bb_callback_code ( $code )
{
    global $codeblocks;

    $code = $code[1];
    $code = str_replace ("<br>", "", $code);
    
    $code_id = uniqid(rand(), true);
    
    $codeblocks[$code_id] = "\n".'<pre>' . $code . '</pre>'."\n";

    return '[codeblock=' . $code_id . ']';
}
Insgesamt 1 mal bearbeitet, zuletzt am 16.04.2008 um 18:07:51

Benutzer gelöscht
Beiträge: 800

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von Benutzer gelöscht Benutzer gelöscht, am Wednesday den 16.04.2008 um 18:11:03

<br> solltest du vielleicht so ersetzen:

 
HTML
1
preg_replace('/<br\s*\/?>/i', '', $code);

Es könnte ja sein, dass es xHTML ist.

Insgesamt 1 mal bearbeitet, zuletzt am 16.04.2008 um 18:11:38

podthepunk
Beiträge: 76

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "preg_replace soll bestimmte Textpassagen ignorieren" von podthepunk podthepunk, am Wednesday den 16.04.2008 um 18:14:32

ist es in diesem Fall nicht, aber danke für den Trick, werds mit einbauen.