PHPの正規表現で質問です。

一致した文字列の前後○文字まで取得したいと思います。

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

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

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

回答の条件
  • 1人2回まで
  • 登録:2009/05/19 22:29:09
  • 終了:2009/05/19 23:28:58

回答(2件)

id:rouge_2008 No.1

rouge_2008回答回数594ベストアンサー獲得回数3512009/05/19 22:43:43

ポイント60pt

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

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

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


・SJISまたはEUCの場合

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

・UTF8の場合

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

id:k27w

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

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

2009/05/19 23:28:52
id:GoldenDawn No.2

GoldenDawn回答回数426ベストアンサー獲得回数812009/05/19 23:03:36

ポイント10pt
<?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) ;
?>

この質問への反応(ブックマークコメント)

トラックバック

  • PHP正規表現で文字列抽出 PHPの正規表現を使うたびに忘れるのでメモ。 マッチした文字列の前後の文字列を取得している。 参考URL http://q.hatena.ne.jp/1242739747 $text = ’今日は晴れのち曇りです
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません