ある文字列を検索し、マッチがあった場合にその文字のフォント装飾を変えるスクリプトを作りたいのですが、期待する結果が得られずに困っています。説明すると長いので例を出します。
たとえば、文字列中に "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
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...
※言語やソフトによって実装状況が異なります。
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 のように参照できるとは知りませんでした。
ありがとうございます。
こちらでいかがでしょうか?
preg_replace('/(question)/i', '$1', 'QueStion'); // outputs QueStion
ありがとうございます。
こんなにスマートに解決できるとは思いませんでした。
ばっちりです。
$1、$2 のように参照できるとは知りませんでした。
ありがとうございます。