2016-05-27 5 views
0

Ich versuche preg_replace zu verwenden Klammer ersetzen mit einem Unterstrich, außer wenn diese Klammer in einem Codeblockpreg_replace nur, wenn nicht in einem Block

Exemple:

this is my {text} 
And this is <code>if (true) { echo "hello world" }</code> 
And also a multine line one 
<code> 
if (true) { echo "hello world" } 
</code> 
Another {my super text} 

Ich muss Ausgabe:

this is my _text_ 
And this is <code>if (true) { echo "hello world" }</code> 
And also a multine line one 
<code> 
if (true) { echo "hello world" } 
</code> 
Another _my super text_ 

Danke

+1

So zeigen, was Sie bisher versucht haben. Wir (vielleicht) reparieren den Code, den Sie geschrieben haben. Wir sind nicht hier, um deine Arbeit für dich zu tun. –

+0

Ihr Text ist keine reguläre Sprache. Daher können Sie es nicht ordnungsgemäß mit einem regulären Ausdruck analysieren. Sie müssen es linear manuell analysieren. – kainaw

+1

Verwenden Sie eine andere Methode zum Extrahieren der Nicht-Code-Abschnitte der Zeichenfolge. Dann machen Sie den 'preg_replace' darauf und fügen Sie ihn zusammen mit den Codeblöcken zurück. – Barmar

Antwort

0

Ich glaube, ich es habe, mehr Test müssen aber scheint zu sein, ok

preg_replace("<code(?:\s+\w+)*>.*?</code>(*SKIP)(*FAIL)|\{|\})is", "_", $text); 
0

Sie müssen zuerst die Codeblöcke von den Textblöcken trennen . Sie könnten dazu eine Kombination aus strpos() und substr() verwenden.

Verwandte Themen