PHPで始点となる文字列(キーワード)と終点となる文字列(キーワード)を指定して、その間の文字列を削除する方法を探しています。
例えば、
Web制作のお悩みを解決するQ&Aとキュレーションサービス
という文のうち、削除をする始まりの文字列を「お悩み」と指定して、削除が終わる文字列を「キュレーション」としたとき、その間の文字列を含めた「お悩みを解決するQ&Aとキュレーション」を削除して「Web制作のサービス」とはきだしてくれる感じです。
キーワードは文章中に複数回出現を想定して、「お悩み」がでてきたら「キュレーション」がでてくるところまでを削除、また「お悩み」がでてきたら「キュレーション」が出てくるまで削除...というのを考えております。
仮に「お悩み」があって「キュレーション」がなかった場合は、「お悩み」が登場以降は全削除を想定しています。
質問の仕方が下手ですいませんが、教えて頂けると幸いです。
みんなの回答 4 件
$search_str = ’Web制作のお悩みを解決するQ&Aとキュレーションサービス’;
$keyword_start = ’お悩み’;
$keyword_end = ’キュレーション’;
preg_match(’/’.$keyword_start.’(.*?)’.$keyword_end.’/’, $search_str, $match);
echo $match[0];
// $match[0] → お悩みを解決するQ&Aとキュレーション
形態素解析使ったほうがいくない?
テキスト解析:日本語形態素解析API - Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.htmlかなりアナログな方法です。正規表現使用した方が自由度は高そうですね。あくまでサブ的な提案です。思いつきで書いたので穴があったらごめんなさい。
$str = 'Web制作のお悩みを解決するQ&Aとキュレーションサービスですがこのサービスは、お悩みを解決するQ&A解決するQ&Aとキュレーションサービスお悩みを解決するQ&A解決す';
remove_sandee('お悩み', 'キュレーションサービス', $str);
function remove_sandee($h, $t, $s) {
$r = array();
$b = explode($h, $s);
foreach ($b as $p) {
if (preg_match("/{$t}/", $p)) {
$e = explode($t, $p);
$e[0] = '';
$r[] = implode($t,$e);
} else {
$r[] = (!$r) ? $p : '';
}
}
echo implode($h, $r);
}
このトピ主のレベルがマジで謎
本当は分かって聞いてんじゃないの?
って思うわ。
関連するトピックス