PHPでpreg_replace_callbackを使用している場合、https://regex101.comに正しく一致する次の正規表現はありません。PHP正規表現でエスケープされた値が正しく一致しない
(?<!\\)(?:\\\\)*{(.*?)(:(.*?))?}
これは主に機能しますが、複数レベルのエスケープでは機能しないようです。例えばテキスト処理(太字マッチ正しく、イタリックが一致しなければならないかを示し且つないか、またはどのような一致はなくすべきである):
{イントロダクション}迅速褐色{動物}を飛び越え怠け者{otherAnimal}。空の{}も一致する必要があります。 \ {不一致}をエスケープする必要があります。 の前にエスケープする\\ {一致する必要があります} 3回エスケープする必要があります\\\ {not match} 4エスケープ\\\\ {一致する必要があります}。
それはPHPの文字列の中だからPHPには、正確なコードが倍増スラッシュでこれであることに注意してください:
preg_replace_callback('/(?<!\\\\)(?:\\\\\\\\)*{(.*?)(:(.*?))?}/',...
正確に動作しないコードを入力してください。 http://ideone.com/aem3mVリンクを使用することができます。 –
私が覚えていれば、 '/ some_regex/'gm'のような修飾子を使うことができます。 –
@ Wiktor-Stribiżew私はあなたのコードを試しました。 – Gujamin