• 締切済み

mysqlからの検索結果文字列を範囲指定で抽出

mysqlからphpで呼び出し、検索結果を全文表示させていますが、検索文字の±何文字を抽出と範囲指定できるのでしょうか? 例 "今日"で検索 現在は "昨日は雨でした。今日は晴れです。" と全文呼び出し 理想は "・・・した。今日は晴れ・・・" 検索文字の±3文字を呼び出すことです。

みんなの回答

  • fa-ce
  • ベストアンサー率42% (9/21)
回答No.2

(1)は、パターンを下のように変更してみてください。 他の条件や半角文字などが入っているとこのパターンに 当てはめるとおかしくなります。 perl正規表現について検索でたくさんヒットするので調べてみてください。 $patturn= "/.{0,6}".$key.".{0,6}/"; (2)は、一度変数に代入してからpreg_matchを咬ませてから連結する といった流れではどうでしょう? if($rows){ while($row = mysql_fetch_array($result)) { extract($row); preg_match ($patturn,$text2,$matches); $temp.= $No."<BR>".$text1."<BR>".$matches[0]."<BR>";    } }

参考URL:
http://www.rfs.jp/sb/perl/02/09.html
shin-7777
質問者

お礼

if($rows){ while($row = mysql_fetch_array($result)) { $temp .= $row["No"]."<BR>"; $temp .= $row["text1"]."<BR>"; $temp .= preg_match ($patturn,$row["text2"],$matches); $temp .= $matches[0]    } } と連結の中にpreg_matchを入れることで目的のことが達成できました。まだ文字化けしますがperl正規表現については何とか自力で勉強します。ほんとうにありがとうございました。

すると、全ての回答が全文表示されます。
  • fa-ce
  • ベストアンサー率42% (9/21)
回答No.1

正規表現を使って表示させる際に 正規表現で変換するというのはどうでしょうか? <?php $str = "昨日は雨でした。今日は晴れです。"; $key = "今日"; $patturn= "/.{6}".$key.".{6}/"; //パターンは一例です preg_match ($patturn,$str,$matches); var_dump($matches[0]); echo $matches[0]; ?>

shin-7777
質問者

お礼

無事解決しました。ありがとうございます。正規表現はほとんど学んでいないので、今後がんばります。

shin-7777
質問者

補足

すいません。出来たと思ったのですが応用が出来ませんでした。 (1)検索文字が文頭、文末の場合はエラーとなってしまう。 (2)ループでmysqlから取り出す場合には? if($rows){ while($row = mysql_fetch_array($result)) { $temp .= $row["No"]."<BR>"; $temp .= $row["text1"]."<BR>";    $temp .= $row["text2"]."<BR>";    } } と取り出す場合、text2だけに文字カット処理を行いたいのですがどのようにすればよいのでしょうか?ど素人で申し訳ありません。

すると、全ての回答が全文表示されます。

関連するQ&A