文字列から指定文字が抽出する際に合わせてその前後の文字数を指定数分だけ合わせて抜き出す平成30年 10月 3日 作成

0087

概略

文字列から指定文字列を取り出す際、その取り出す文字列の前後の文字も合わせて場面がでてきた。

例)文字列「abcdefghijk」から「ef含む前後2文字」の「cdefgh」。


文字列から前後の文字数指定して文字列が取り出し・表示できる様にする。

手段

文字列の取り出し際に、文字列の一部分を返す「substr()」関数を利用する。その際に、取り出す文字列が最初に現れる場所を調べる必要がでてくるので「strpos()」関数にて対応する。

実装方法

substr関数 構文

substr("対象となる文字列", "開始位置", "長さ");

対象となる文字列:最低1文字以上を指定。

開始位置:0から数えて何番目から始まる文字列になる。

開始位置から数えての文字数分。

strpos関数 構文

strpos("検索を行う文字列", "検索文字列");

見つからない場合は”FALSE”を返す。

<?php
	// 文字列
	$str = "abcdefghijklmnopqrstuvwxyz";
	// 検索文字列
	$out = "lmn";
	// 前後の文字数
	$word_count = 3;
	// 最初に現れる場所 「11」が返ってくる 0始まりで11番目
	$start = strpos($str, $out);
	
	// 「!=」はNG。例えば検索文字を「abc」とすると「0」が返ってくるので
	if($start !== false){
		// 開始位置がマイナスになるのを防ぐ
		if($start-3 > 0){
			$result = substr($str, $start-$word_count, strlen($out)+$word_count*2);
		}else{
			$result = substr($str, 0, strlen($out)+3+$start);
		}
	}else{
		$result = '該当文字列はありません';
	}
	
	var_dumop($result);
	string(9) "ijklmnopq"
	
	// 検索文字列が「abc」の場合
	var_dumop($result);
	string(6) "abcdef"
	
	// 検索文字列が「wxy」の場合
	var_dumop($result);
	string(7) "tuvwxyz"
?>

全角文字を含む場合

<?php
	$str = "あいうえおかきくけこさしすせそabcdefg";
	$out = "えおか";
	$word_count = 3;
	
	$start = mb_strpos($str, $out);
	
	if($start !== false){
		if($start-3 > 0){
			$result = mb_substr($str, $start-$word_count, mb_strlen($out, "utf-8")+$word_count*2, "utf-8");
		}else{
			$result = mb_substr($str, 0, mb_strlen($out, "utf-8")+3+$start, "utf-8");
		}
	}else{
		$result = '該当文字列はありません';
	}
	
	var_dump($result);
	string(27) "あいうえおかきくけ"
	
	// 検索文字列が「abc」の場合
	string(15) "すせそabcdef"
?>

考察

無事文字列から検索文字+前後文字で取り出す事ができた。


全角(2バイト文字)が混在している場合には注意が必要。

「substr()」関数と「strlen()」を「mb_substr()」関数と「mb_strlen()」関数とし、文字エンコーディングはそれぞれ第4引数、第2引数に取る必要がある。

また、「strpos()」関数に関しても、「mb_strpos()」関数とし、第3引数のオフセットは「0」にし、第4引数には使用している文字エンコーディングをセットする必要がある。

最後までお読み下さり ありがとうございました。記事はここ迄です。

尚、本記事は作成から「5年以上」経過しています。

記事作成当時と現在の状況等により内容が適切でない場合があります。また、リンク切れが生じている場合もあります事を予めご了承下さい。

お気に入りに登録しますとお気に入り記事を一元管理でき、再度閲覧したい場合等 容易に記事を探し出す事ができますのでご活用下さい。

下段にはコメントを掲載しております。

広告バナー

コメント

頂いたコメントを下記に掲載しております。更に下部にはコメント投稿フォームを設けております。

注意事項を確認・了承した上、コメント投稿お願いいたします。

注意事項に該当するコメントにつきましては、事前告知なしに投稿したコメントの削除を行う場合があります。

予めご了承下さい。

  • 記事内容と無関係なコメント
  • 公序良俗に反するコメント
  • 個人情報や法令違反を含むコメント
  • その他、管理者が不適切と判断したコメント

現在 頂いているコメントはありません

返信先(コメント管理番号)コメントに対し返信する場合のみ
お名前・ハンドルネーム2~32文字内で入力下さい
メールアドレス公開される事はありません
電話番号半角数字+ハイフンで入力下さい
コメント全角500文字内で入力下さい