人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP の文字列検索と置き換えの際の大文字小文字の区別について

ある文字列を検索し、マッチがあった場合にその文字のフォント装飾を変えるスクリプトを作りたいのですが、期待する結果が得られずに困っています。説明すると長いので例を出します。

たとえば、文字列中に "question" という単語 (大文字小文字の区別なし) が出てきたら、その単語をボールドにしたい場合
$search = "question";
str_replace ($search, "<span class='bold'>".$question."</span>", "I have a Question");
これではヒットしないので置き換えは行われません。そこで、str_replace から str_ireplace にすると
str_ireplace ($search, "<span class='bold'>".$question."</span>", "I have a Question");
これではボールドになりますが、置き換え後が "I have a question" のように単語の先頭が小文字なってしまいます (当たり前ですね)。

検索の際には大文字小文字の区別なく検索し、ヒットした場合は"元の文字列の大文字小文字を維持したまま"フォント装飾だけを行いたいと思っています。
何かスマートな方法はないでしょうか?

因みに、単語の語頭だけを処理すればよいというわけではなく、QUESTION や quEstion というパターンにも対応したいです。

PHP 5.3.0
Apache 2.2.11
Win XP Home

●質問者: にぎたま
●カテゴリ:コンピュータ インターネット
✍キーワード:Apache HOME PHP WIN XP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● rouge_2008
●50ポイント ベストアンサー

iオプションを指定すると大文字小文字を区別しません。

$text = 'I have a Question.<br />and I Have a QuesTion';
$search = '/(question)/i';
echo preg_replace($search, "<span class='bold'>$1</span>", $text);

perl互換の正規表現なので、()内のマッチした文字列を$1、$2・・・というように参照することが出来ます。

http://homepage2.nifty.com/buckeye/software/helps/st/pages/regul...

※言語やソフトによって実装状況が異なります。

◎質問者からの返答

ばっちりです。

$1、$2 のように参照できるとは知りませんでした。

ありがとうございます。


2 ● まつぼっくり
●20ポイント

こちらでいかがでしょうか?

preg_replace('/(question)/i', '$1', 'QueStion'); // outputs QueStion

◎質問者からの返答

ありがとうございます。

こんなにスマートに解決できるとは思いませんでした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ