2017-01-12 8 views
-1

PHPでpreg_replace_callbackを使用している場合、https://regex101.comに正しく一致する次の正規表現はありません。PHP正規表現でエスケープされた値が正しく一致しない

(?<!\\)(?:\\\\)*{(.*?)(:(.*?))?} 

これは主に機能しますが、複数レベルのエスケープでは機能しないようです。例えばテキスト処理(太字マッチ正しく、イタリックが一致しなければならないかを示し且つないか、またはどのような一致はなくすべきである):

{イントロダクション}迅速褐色{動物}を飛び越え怠け者{otherAnimal}。空の{}も一致する必要があります。 \ {不一致}をエスケープする必要があります。 の前にエスケープする\\ {一致する必要があります} 3回エスケープする必要があります\\\ {not match} 4エスケープ\\\\ {一致する必要があります}

それはPHPの文字列の中だからPHPには、正確なコードが倍増スラッシュでこれであることに注意してください:

preg_replace_callback('/(?<!\\\\)(?:\\\\\\\\)*{(.*?)(:(.*?))?}/',... 
+0

正確に動作しないコードを入力してください。 http://ideone.com/aem3mVリンクを使用することができます。 –

+0

私が覚えていれば、 '/ some_regex/'gm'のような修飾子を使うことができます。 –

+0

@ Wiktor-Stribiżew私はあなたのコードを試しました。 – Gujamin

答えて

0

Wiktor第おかげで、私はこの問題を考え出しました。すべてのエスケープがエスケープされるように、私は文字列を定義するときにHeredoc構文を使用していました。 Nowdocを使用するように文字列を変更しました。ありがとうございました!

関連する問題