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

PHPの正規表現で質問です。
一致した文字列の前後○文字まで取得したいと思います。

$text = '今日は晴れのち曇りです。';
preg_match("/(.*)(晴れ)(.*)/is",$text,$array);
print_r($array);

とすれば、検索ワード「晴れ」の前後の文字を取得できますが、
「○文字まで」という文字数を指定して取得する方法が分かりません。
例えば前後2文字まで取得するとして、$arrayには「日は」「晴れ」「のち」が結果として返ってくるイメージです。

もし、正規表現だけで難しい場合は代替え案を教えて下さい。


●質問者: k27w
●カテゴリ:ウェブ制作
✍キーワード:PHP イメージ 前後 文字列 検索
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● rouge_2008
●60ポイント

文字コードは何でしょうか?

単純に以下のような結果を得たいだけなら、文字数を指定する事で可能です。

Array ( [0] => 日は晴れのち [1] => 日は [2] => 晴れ [3] => のち )


・SJISまたはEUCの場合

preg_match("/(.{4})(晴れ)(.{4})/is",$text,$array);

・UTF8の場合

preg_match("/(.{6})(晴れ)(.{6})/is",$text,$array);

◎質問者からの返答

教えていただいた方法で目的が達成できました。ありがとうございます。

UTF-8の場合、日本語の1文字は3になるんですね。勉強になりました。


2 ● GoldenDawn
●10ポイント
<?php
$t = '晴れ' ;
$n = 2 ;

// きっちり $n 文字
$text = '今日は晴れのち曇りです。' ;
preg_match('/(.{'.$n.'})('.$t.')(.{'.$n.'})/u', $text, $array) ;
print_r($array) ;


// 0 ? $n 文字
$text = '晴れの' ;
preg_match('/(.{0,'.$n.'})('.$t.')(.{0,'.$n.'})/u', $text, $array) ;
print_r($array) ;
?>
関連質問


●質問をもっと探す●



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