regexp NOT

heyhey

ich werd langsam blöde, ich will für nen kleines minitemplate system folgende strings ersetzen

Code:
{foo}

nicht aber solche

Code:
\{bar\}

jetzt hab ich dazu schon den passenden schnipsel immer gehabt und wollte jetz das nicht mit reinbauen.

vorher:

Code:
$this->html = preg_replace('~{' . $key . '}~',$value,$this->html,$this->count[$key]);

nachherfolgender getesterter code (hier getestet: RegExr )

Code:
[^\\]{(.*)[^\\]\}

funktionier aber in php nicht, egal was ich mache :/
ich bin grad etwas ratlos, der probierte code sieht dann so aus:

Code:
$this->html = preg_replace('~[^\\\\]{' . $key . '[^\\\\]}~',$value,$this->html,$this->count[$key]);

fehlermeldung gibts nicht dazu, der preg_matched aber einfach nix mehr! :/
kann mir jemand meinen fehler zeigen?
 
also ich habs jetzt nicht getestet, aber deine geschweiften klammern nach einer char-klasse sollten wohl escaped werden, wenn sie nicht für eine repetition gehalten werden sollen ...
 
so?
PHP:
<?php
$lines = array(
    '{foo}',
    '\{bar\}',
);

foreach ($lines as $line) {
    echo $line;
    if (preg_match('~[^\\\]?{[^{}]+[^\\\]}~', $line)) {
        echo ' - MATCH' . chr(10);
    } else {
        echo ' - FAIL' . chr(10);
    }
}

Code:
{foo} - MATCH
\{bar\} - FAIL
 
Zurück
Oben