2011-07-07 26 views
2

私はpreg_replaceと苦労しています。本当に誰かが私のエラーを見つけられることを願っています。正規表現は私のアキレス腱です。PHPでpreg_replaceを取得したエスケープ

私はそう、同様の質問を検索し、preg_quoteを見つけましたが、私は、私は私の置換文字列の非正規表現の部分における任意の正規表現文字を持っていると信じていません<img src="http://mydomain/some/path/123.jpg"></img>

{{123.jpg}}のような文字列を交換しようとしています私は迷っている。

は、ここで私がしようとしているものです:

function replace($article_id,$text){ 
    $pattern = '/\{\{(.*?)\}\}/'; 
    $replacement = '<img src="'.URL_CONSTANT.'articles/'.$article_id.'/'.'${1}'.'"></img>'; 
    return preg_replace($pattern, $replacement, $text); 
} 

私はパターンが一致していることを確認することができますが、それが適切に交換していません。私は問題が${1}の置換の前に最終的な/に関連すると思うが、私はそれが特別な正規表現のキャラクターだとは思わないので、なぜ私は見ない。

ご協力いただきましてありがとうございます。

編集:この問題は私の表現と無関係であることがわかりました。私の表現が適切に形成されたことを確認するのを手伝ってくれた皆様に感謝します!

+3

[私にとってうまくいくようです](http://codepad.org/KLNt2JSr)どのような交替問題が発生していますか? – alex

+0

@alex興味深い。テストする時間をとってくれてありがとう。テキストが再解釈されたときに問題が発生するのだろうかと思います。私はCKEditorへの入力を傍受し、画像のショートカットを完全な画像タグで置き換えています。 –

+0

http://codepad.orgで問題を再現できる場合は、リンクしてください。もう一度見ていきます。また、 '{$ 1}'は後方参照には問題ありませんが、あいまいさも軽減します。 – alex

答えて

1

ありがとうございました!問題は正規表現ではなく、むしろCKEditor用の「scayt」オートコレクトプラグインであることがわかりました。 {{124.jpg}}のショートカットタグは、間違った単語として検出されたため、スパンに変換されていました。私はこれらのスパンを削除し、元の{{abc.def}}フォーマットに置き換えた別の正規表現を書いています。これは問題を解決したようです。