- ベストアンサー
正規表現を使用して、>から改行までを色変更したい
正規表現の扱いで困っております。 やりたいことは、BBSで返信記事を書く際に、「>~さんへ」または、「>~さんへ」となっていたらその部分を色変更したいのです。 下記を含めて何パターンか試行したのですが、文字列が化けてしまい上手くいきません…。 $str = preg_replace( "(^>.*?<br />|^>.*?<br />|<br />>.*?<br />|<br />>.*?<br />)", "<font color=RED>\1</font><br />", $str ); $str = mb_ereg_replace( "(^([>>][^<]+)<br />|(<br />)+([>>][^<]+)<br />)", "<font color=RED>\2\4</font><br />", $str ); (環境) ・Windows2000&XP ・PHP 4.3.11 どなたかこれなら上手くいくというパターンが解りましたら、ご教授頂けたら幸いです。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえずこんな感じで行けるかと思います。 mb_ereg_replace("((>|>|>).*さんへ(<br[\\s\/]{0,}>|\\n))","<font color=RED>\\1</font>",$str); それと、置換元の文字列は既にhtmlspecialchars済みの文字列ですよね?だとすると">"は既に>に置き換わっているでしょうから、これは不要かも知れません。 あと全角文字が含まれているので、スクリプトファイル自体がEUC-JPで書かれている必要があります、念のため。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
試してないのですが・ 「/」を「\/」にしてやらないといけないような気がしますが・ あと、置き換える側でも \1とか\2\4とかを \\1とか\\2\\4とかにしないといけないような気がします。
お礼
ご回答有難うございます。 そうですね…。ご指摘のとおりで。初歩的ミスでした。
- wakame0729
- ベストアンサー率32% (245/765)
正規表現のパターンが正しいかどうかは検証してないんですが、内部エンコードは何になってますか?もしShiftJISですとmb関数群が正常に動かない場合があります。 内部エンコーディングをEUC-JPなどにする必要がありますが、この点はどうですか?
補足
ご回答ありがとうございます。 内部エンコーディングは、EUC-JPです。設置予定のサーバも同様です。 文字列が化けるのは、「>ALL」としてもバイナリのような文字となってしまうという意味です。恐らく、変換範囲の指定ミスかと思うのですが…。
お礼
ご回答有難うございます。 ご提示頂いたパターンを早速試してみます。 有難うございました。