2016-04-02 17 views
2

Ich habe Inhalt mit Token und möchte alle Token entfernen, die nicht mit Test starten. Zum Beispiel habe ich den Inhalt:Php preg_replace - regulärer Ausdruck (Token entfernen)

$content = 'Hello [test:username]. What are you [token:name]'; 
$string = preg_replace('/\[test(.*)\]/', '', $content); 

Diese Arbeit aber ersetzen mit leeren String alle Token, das mit Test zu starten. Ich will gegenüber startet nicht mit test und ersetzen alle anderen. Wie sollte ich den regulären Ausdruck ändern? Ich möchte dieses Ergebnis nach preg_replace erhalten:

$content = 'Hello [test:username]. What are you'; 
+0

Schauen in der Regex-Dokumentation, vor allem mit '^' am Anfang des Musters ... – Stuart

Antwort

1

können Sie verwenden die folgende regex

(?:\[test:[^]]+\])(*SKIP)(*F)|(?:\[\w[^]]+\]) 

So Ihr Code wie folgt aussieht wie

preg_replace('/(?:\[test:[^]]+\])(*SKIP)(*F)|(?:\[\w[^]]+\])/', '', $content); 

Erläuterung:

(?:\[test:[^]]+\]) // Will capture a group of tokens that have same 
         pattern like as [test:...] 

(*SKIP)(*F)  // This is supported by PCRE to skip the above captured group 

|(?:\[\w[^]]+\]) // This'll capture rest of the group that doesn't 
        contains pattern like as [test:...] 
+1

Du bist Willkommen. Freut mich, dass es dir geholfen hat. @ user3421014 Ich habe auch eine Erklärung für zukünftige Benutzer hinzugefügt –