スレッド表示 | フラット表示〕 全トピック 920 件中 546 番目 次≫ ≪前

半角英語の検索結果について

created: 2004-09-29 18:36 | modified: 2004-09-30 16:18 | reply: 2

[1822] 半角英語の検索結果について

user: サトシ | created: 2004-09-29 18:36
こんばんは。
今検索機能を作っていまして、
[1813]番記事の延長になるのですが、
英語単語の検索結果で悩んでいます。

$honbun ='abcdefg';
$search = 'A';
mbregex_encoding('Shift_JIS');
$honbun = mbereg_replace($search, "<u>$search</u>", $honbun, "i");

上記を実行すると、日本語の場合は全く問題ないのですが、
大文字Aで検索して小文字にヒットした場合、<u>A</u>bcdefgのようになってしまいます。
本文の大文字小文字を変更せずに下線だけ引く良い方法はないでしょうか?

自分で考えて以下の様に作ってみたのですが、今度は[1813]記事の現象が
出てしまいます。
$honbun = preg_replace_callback("/$search/", create_function('$matches', 'return "<u>$matches[0]</u>";'), $honbun)

mbpreg_replace_callbackなんていう関数はないみたいなので、どうか知恵を貸して下さい。
よろしくお願いします。

WinXP PHP4 Apache2.0
reply: 1825 返信 編集 削除

[1825] マッチした部分文字列の参照

user: | created: 2004-09-30 13:41
こんにちは。一つの方法としては、

$honbun = mbereg_replace($search, "<u>$search</u>", $honbun, "i");

の部分を、

$honbun = mbereg_replace($search, "<u>\\0</u>", $honbun, "i");

のように書き換えると、サトシさんの希望されているような結果が
得られると思います。

--------------------

◆念のため解説しておきますと…
\\0というのは特殊変数(でいいのかな?)みたいなもので、対象文字列の中の
マッチした部分文字列が自動的に代入されます。
上記の場合、$searchにマッチした"a"("A"ではない)が\\0に代入されている
わけですね。

ちなみに、検索文字(正規表現でも可)の複数の部分を()で括って、順次その
結果を参照することも出来ます(カッコで括った場合、マッチした部分文字列は
\\1,\\2,\\3…に順次代入されていきます)。例えば、

$search = 'A';
$search2 = 'B';
$honbun = mbereg_replace("($search)($search2)", "<u>\\1</u><b>\\2</b>", $honbun, "i");

このように書きますと、"<u>a</u><b>b</b>cdefg" という結果が得られます。
Parent: 1822  reply: 1828 返信 編集 削除

[1828] Re.マッチした部分文字列の参照

user: サトシ | created: 2004-09-30 16:18
箱さん、こんにちは。
ばっちりうまくいきました。
\\0もマニュアルに出てましたが、使い方が分かりませんでした。
PHPは便利に出来てるな?。
解説分かりやすかったです。
ありがとうございました。
Parent: 1825  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 546 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑