PHP5にて文章の作り変えとか出来ますか?


$a=
"ポケモンは楽しい。アニメの中では相当な人気だ。それは、ポケモンではなくバッタモンです。<br />
なんでだろうなんでだろうなんでだろうなんでだろうなんでだろう。<br />
『ポケットモンスター』シリーズは、「ポケットモンスター(以下ポケモン)」という不思議な生き物・・・。"


上記のような文章を以下のように変えたいのですが・・・

$a=
"<strong>ポケモン</strong>は楽しい。アニメの中では相当な人気だ。それは、<strong>ポケモン</strong>ではなくバッタモンです。&nbsp;
『ポケットモンスター』シリーズは、「ポケットモンスター(以下<strong>ポケモン</strong>)」という不思議な生き物・・・。"


(1)<br />の変わりに&nbsp;を入れる。
(2)キーワードが『ポケモン』の場合、ポケモンに<strong>タグを付ける。
(3)『ポケモン』のない文章(。以降。以前)は省く。


こんな芸当は出来るのでしょうか?
よろしくお願いしますm(_ _)m

回答の条件
  • 1人2回まで
  • 登録:2007/10/27 08:21:09
  • 終了:2007/10/27 17:14:30

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/10/27 16:57:39

ポイント60pt

もっと短く出来そうな気もしますが、下記のような感じでどうでしょうか。


<?php
$a="ポケモンは楽しい。アニメの中では相当な人気だ。それは、ポケモンではなくバッタモンです。<br />
なんでだろうなんでだろうなんでだろうなんでだろうなんでだろう。<br />
『ポケットモンスター』シリーズは、「ポケットモンスター(以下ポケモン)」という不思議な生き物・・・";

// <br /> で配列に分割
$ar = explode( "<br />", $a );

for( $i = count( $ar ) - 1 ; $i>=0 ; --$i ){

// ポケモン があったら置換、なかったら配列から取り除く
   if ( strpos( $ar[$i], "ポケモン", 0 ) === FALSE )
       array_splice( $ar, $i, 1);
   else
       $ar[$i] = str_replace( "ポケモン", "ポケモン", $ar[$i] );
}
// &nbsp; で結合
$a2 = implode( "&nbsp;", $ar );
print $a2;
?>
id:seadwell

こりゃすげー!完璧です。

プログラムって何でも出来るんですね^^

今から、教えていただいた関数を念入りに見てみます。

ありがとうございました^^/

2007/10/27 17:13:19

その他の回答(1件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/10/27 08:36:12

ポイント50pt

こんな感じ?

<?php
$a =
"ポケモンは楽しい。アニメの中では相当な人気だ。それは、ポケモンではなくバッタモンです。<br />
なんでだろうなんでだろうなんでだろうなんでだろうなんでだろう。<br />
『ポケットモンスター』シリーズは、「ポケットモンスター(以下ポケモン)」という不思議な生き物・・・。" ;

$a = str_replace(array('<br />', 'ポケモン'), array('&nbsp;', '<strong>ポケモン</strong>'), $a) ;

echo $a ; 
?>
id:seadwell

GEN111さん、いつもありがとうございますm(_ _)m

今回、実行結果は

(1)br /の変わりに を入れる。

(2)キーワードが『ポケモン』の場合、ポケモンにstrongタグを付ける。

はできていましたが、

(3)『ポケモン』のない文章(。以降。以前)は省く。

は残念ながら出来ませんでした。

しかし、教えていただいたstr_replaceで何とか出来そうな気がします。

頑張ってみます。

ありがとうございました^^

2007/10/27 16:48:54
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/10/27 16:57:39ここでベストアンサー

ポイント60pt

もっと短く出来そうな気もしますが、下記のような感じでどうでしょうか。


<?php
$a="ポケモンは楽しい。アニメの中では相当な人気だ。それは、ポケモンではなくバッタモンです。<br />
なんでだろうなんでだろうなんでだろうなんでだろうなんでだろう。<br />
『ポケットモンスター』シリーズは、「ポケットモンスター(以下ポケモン)」という不思議な生き物・・・";

// <br /> で配列に分割
$ar = explode( "<br />", $a );

for( $i = count( $ar ) - 1 ; $i>=0 ; --$i ){

// ポケモン があったら置換、なかったら配列から取り除く
   if ( strpos( $ar[$i], "ポケモン", 0 ) === FALSE )
       array_splice( $ar, $i, 1);
   else
       $ar[$i] = str_replace( "ポケモン", "ポケモン", $ar[$i] );
}
// &nbsp; で結合
$a2 = implode( "&nbsp;", $ar );
print $a2;
?>
id:seadwell

こりゃすげー!完璧です。

プログラムって何でも出来るんですね^^

今から、教えていただいた関数を念入りに見てみます。

ありがとうございました^^/

2007/10/27 17:13:19
  • id:Mook
    ポイントとイルカありがとうございます。


    ほめていただいた後で恐縮ですが、<storong> タグが消えてしまってる(Escapeし忘れました)ので
      str_replace( "ポケモン", "<strong>ポケモン</strong>", $ar[$i] );
    に修正してください。
  • id:GEN111
    すみません。質問を正しく理解してませんでした。
    書き直し。utf-8 限定。


    $a=
    "ポケモンは楽しい。アニメの中では相当な人気だ。それは、ポケモンではなくバッタモンです。<br />
    なんでだろうなんでだろうなんでだろうなんでだろうなんでだろう。<br />
    『ポケットモンスター』シリーズは、「ポケットモンスター(以下ポケモン)」という不思議な生き物・・・。<br />" ;

    $a = preg_replace('/([^。]*。?)/esu', 'strpos("$1", "ポケモン") !== FALSE ? str_replace(array("<br />", "ポケモン"), array("&nbsp;", "<strong>ポケモン</strong>"), "$1") : ""', $a) ;

    echo $a ;
  • id:seadwell
    Mookさん、わざわざコメントありがとうございます。
    私も回答に返信したときタグが消えたことがありました。
    ポケモンの字が太くなっていたので、strongが入っているのだろうと勝手に解釈しました^^
    Escapeなんぞ考え付きもしませんでした^^;
  • id:seadwell
    GEN111さん、わざわざコメントありがとうございます。
    私のほうこそミスがありました。
    (3)の(。以降。以前)となると、『アニメの中では相当な人気だ。』も消えなければなりません。
    Mookさんのbr /で区切る回答を見て、ミスに気付きました。
    こちらこそ、紛らわしい質問でスミマセン。

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

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

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

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