• ベストアンサー

文章から指定した範囲の文字列を検索し取り出す方法

ある文章中から、指定した範囲の文字列が含まれるかどうかを検索し、それを取り出す方法がわかりません。 例えば、 【太郎君は花子さんに会い、「こんにちは」と言いました。】 という文章から 「」の中に入っている文字列(この場合は こんにちは)を取り出したい というように、ある文字や記号と記号の間に含まれる文字列をそのまま取り出したいと思っています。 ※ ・必ずしも「」が含まれるとは限らない ・「」の前、中の文字列が何文字かは決まっていない ・「のみや、」のみの場合は該当する文字列は無しにしたい ※ ・文章中に「」が含まれているのかを判別 ・含まれている場合はその「」内の文字列を抜き出す ・変数として置く といった流れかと思うのですが、具体的にどうしたらいいのかが解りません。 環境はPHP5、win 二ヶ月ほど前にPHPを始めました。まだまだ初心者で、解説サイトやマニュアルを読みながら勉強中です; アドバイスやご意見、ご指導等いただけると幸いです。 よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

たとえばこんなかんじ <? $str = 'Aさんは「こんにちは」と言った。Bくんは「ごきげんよう」と言った。Cちゃんは「」だった'; preg_match_all('/「(.+?)」/mis',$str,$matches); print "<pre>"; print_r($matches); print "</pre>"; ?>

aky_root
質問者

お礼

ご回答ありがとうございます。 preg_match_allを使って試してみたところうまく行きました。 大変勉強になりました。 どうもありがとうございました! 回答No1,2の 「「」のように括弧が重複してしまった場合の取り出し方がまだ少し微妙なので、 ↑の例を参考にしながらもう少し勉強してみたいと思います。

その他の回答 (2)

回答No.2

例が悪かった。 「あいうえ「かきくけこ」さしす #最後の」がない

aky_root
質問者

お礼

すみません、そういったパターンを全く考えていませんでした; そうですね;ありえますよね。大変失礼致しました。 ご指摘ありがとうございます。 「あいうえ「かきくけこ」さしす」 の場合は   かきくけこ の1つ(もっとも狭い範囲)が必要な部分なので、 2.あいうえ「かきくけこ」さしす  かきくけこ  の2つとして取り出す が希望ですが、処理が軽くなるのであれば 1.あいうえ「かきくけこ  1つを取り出す。 でも構いません。 「あいうえ「かきくけこ」さしす の場合も同様に  かきくけこ の部分が取り出せると良いですが、  あいうえ「かきくけこ を取り出すのでも構いません。

回答No.1

「あいうえ「かきくけこ」さしす」 はどのように取り出すべきか? 1.あいうえ「かきくけこ 1つを取り出す。 2.あいうえ「かきくけこ」さしす  かきくけこ  の2つとして取り出す 当たり前だとか言わずに決めておかないと結構嫌な回答がつくから注意してね。

関連するQ&A

  • 文字列の引き算

     JAVA初心者です、宜しくお願いします。  文字列の変更、分割をしたいのですが、色々と参考書を探してみましたが、なかなか理解出来ません。  例えば、"花子"という文字列から、"子"だけを取り除いて"花"だけをプリントしたいのですが、数字みたいに引き算 では出来ないのでしょうか。  また、"太郎"という文字列を"太"、"郎"という二つの文字列の変数を作りたいのですが、やはりインスタンス化とかを してやらないと駄目なのでしょうか。

    • ベストアンサー
    • Java
  • 指定範囲を削除する方法

    phpで変数内の文字列から指定した範囲を削除するということは可能でしょうか。 たとえば、 変数に「いろはにほへとちりぬるをわかよたれそ」という文字列が 入っていた場合、「ほへ」から「わか」の範囲、 つまり「ほへとちりぬるをわか」を削除して 元の変数に「いろはによたれそ」を入れたいのです。 お分かりの方、お教えいただければ幸いです。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • {0>と<0}ではさまれた文字列の置換

    Word文書中で、記号{0>と<0}にはさまれた1文字以上の文字列を、これらの記号も含めて半角スーペスに一括置換する方法を教えてください。Wordのバージョンは、2003です。たとえば、 私の名{0>前は山<0}田太郎です。 上記の文なら、置換後は下記のようになって欲しいのです。 私の名 田太郎です。 なお、{0>と<0}の記号自体は置換できないが、はさまれた文字列をスペースに変換することならできる、という回答でも歓迎いたします。つまり、 下記のようになります。 私の名{0> <0}田太郎です。

  • 【Excel】 指定した文字を表示しない様にしたい。

    こんにちは A列 に B列の文字を表示させますが、 その際指定した幾つかの文字を除いた状態で表示したいのです。 例えばB列の 「私の名前は太郎です。東京都出身です。」 を参照しA列に 「太郎東京都」と表示したいのです。 「私の名前は」「です。」「出身です。」を削除すると言うことですが、 B列は定型句ではないので「私は花子と申します。」の場合もあります。 宜しくお願いいたします。

  • 文字列の分割

    PHP4で作成しています。 DBはMySQLです。 DBに名前が 山田(半角スペース×2)花子 すなわち 山田  花子 とある文字列を取り出して 山田と花子に分割したいのですが出来るでしょうか? 教えてください。 お願い致します。

    • ベストアンサー
    • PHP
  • PHPでクエリ文字列を利用する方法

    PHP初心者のKazukichiと申します。 PHPでクエリ文字列を利用する方法を教えて下さい。 具体的には、下記のように「リンクにクエリ文字列を埋め込む方法」を採りたいのですが、その場合のPHPスクリプトの記述方法についてご教示頂きたいのです。 <a href="kensaku.php?year=2005">2005</a> この場合、yearが変数となるようですが、この変数をPHPスクリプト(kensaku.php)で受け取るには、どのように記述すればよいのでしょうか。 よろしくお願い致します。

    • 締切済み
    • PHP
  • 変数内の指定の文字列を消去するには?

    以下のような文字列が変数aの中に入っているとします "ABC CO.,I","4540",""STAR"","2010/03/31" この中から CO.,という文字だけを抜き取り、 変数aにある文字列は "ABC I","4540",""STAR"","2010/03/31" にしたいと思っておりますが、どのように行ったらよいのでしょうか? 初心者の質問で申し訳ありませんがよろしくお願いします。

  • 指定した文字に検索がかからないようにしたい

    javascriptで文字列検索をさせ、その文字列が含まれる場所までいくようにしたのですが、検索して欲しくない文章や行を検索しないようにする方法はあるのでしょうか? ソースのなかでその文章だけこんなタグを入れることで検索がかからないというのがあれば教えて欲しいです。 とにかく指定した文章に検索がかからないようにする 方法を知っている方がいましたら教えてください。お願いします。

  • 変数内の文字列を指定した数のみ表示。

    こんばんわ。 PHPで変数の中にこんな文字列があったとします。 $a="最近Okwebのサイトのデザインにもだいぶ慣れてこっちのほうがよいのでは。と思うようになってきました。" 普通に表示させるならこれだけと思うんですが、 echo $a 任意の文字数を表示させる関数が思い出せないし検索しても引っかからないです。 アドバイスいただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • そのまま文字列にしたい

    var data= { "名前" : "山田太郎", "年齢" : "16歳" } スクリプト内で上記のように定義している状態なのですが、変数をそのまま文字列にして、結果として下記のように変数に格納したいと思っています。 var string = 'var data={\n"名前" : "山田太郎",\n"年齢" : "16歳"\n}'; 実際にはAIRを利用してjson形式でデータを読み書きしようとしているのですが、文字列への変換の仕方がわからないため質問しました。よろしくお願いします。