2016-06-17 5 views
0

[OK]をチェックして見ましたが、今日のSearchFUは強くありません。 Regexで後方参照のエラーが発生しましたpreg_replace('~$\s*<div>([^<]*?)</div>$\s*~me', '\1', $source);実際に手を使うことができました。式は<div>のタグを見つけ、タグを取り除き、改行を囲む内容を返します。すなわち:PHP preg_replaceエスケープアンパサンドの逆参照正規表現

Parse error: syntax error, unexpected '&' in D:\wamp\www\processfile.php(18) 
: regexp code on line 1 Call Stack: 0.0010 143600 1. {main}() 
D:\wamp\www\processfile.php:0 0.0350 170328 2. preg_replace() 
D:\wamp\www\processfile.php:18 Fatal error: preg_replace(): Failed evaluating 
code: in D:\wamp\www\processfile.php on line 18 Call Stack: 0.0010 143600 
1. {main}() D:\wamp\www\processfile.php:0 0.0350 170328 2. preg_replace() 
D:\wamp\www\processfile.php:18 

私は\ 1後方参照を削除した場合、式は喜んですべてのコンテンツが消去されます:

<td> 
     <div>some value</div> 
    </td> 

<td>some value</td> 

すべてが原因となる<div>&nbsp;</div>まで正常に動作となりdivタグを使用していますが、新しい表現として解析する必要があるようです。

この問題を回避する方法はありますか、この行が実行される前に&の前処理をするだけですか?

答えて

1

あなたの正規表現の最後にはeという修飾語があります。交換するとeval() 'になります。それを削除:

preg_replace('~$\s*<div>([^<]*?)</div>$\s*~m', '\1', $source); 

PHP docs for PCRE pattern modifiersを参照してください。

+0

Bam!ありがとうございました。私は見落としたことが簡単なものになることは分かっていました。私は3日間これらのドキュメントを今すぐ流してきました。 – Toaster