電子書籍の厳選無料作品が豊富!

例えば、「今年のホワイトデーにはお菓子の詰合せを贈ろうと思う。」というテキストファイルがあり、このテキストの『ホワイトデー』と『お菓子』という文字列を抽出し、その文字列に対して外部リンクを設定してページに表示させる場合の処理について、教えていただきたいです。

まず目的の文字列の前後には<w1>~<w2>という文字を付けておき、
文字列中から<w1>~<w2>を検索してその値を返そうとしています。

$str="今年のホワイトデーにはお菓子の詰合せを贈ろうと思う。";
preg_match('/<w1>(.*?)<w2>/is', $str, $keyword);

この処理でいけば、マッチした文字列が$keywordに代入されます。
しかし、テキストに2つ以上の<w1>~<w2>がある場合、
そのすべてを抽出することができません。

プログラミング(php)は始めてまだ半年ぐらいなので、まだまだ初歩のレベルです。
どなたかこの抽出処理の部分についてご教授いただけますでしょうか?

よろしくお願い致します。

A 回答 (2件)

agunuzさんの指摘するようにpreg_match_allで出来ます。



preg_match_allの返す$matchesは2次元配列(PREG_OFFSET_CAPTUREを指定した場合は3次元)になります。

PREG_PATTERN_ORDER(デフォルト)の場合は、第1階層のキーがパターンの番号、第2階層のキーが(0から数えて)何回目のマッチかを表します。
PREG_SET_ORDERの場合はこの逆になります。
用途に合わせて使いやすい方を選択してください。
今回の場合はパターンが1つしかない(おそらく全体マッチは使わずにキャプチャNo.1だけを使うと思われる)ので、デフォルトのままでいいと思います。

簡単に説明しましたが、マニュアルを読んでください。
マニュアルを読む癖をつけましょう。
使用する関数名が分からないときは、こんな感じで検索すれば結構見つかります。

例1:配列の先頭に新しい要素を追加したい

検索ワード:「PHP 配列 先頭 追加」
検索結果: http://bit.ly/ZwXVf0

例2:複数回の正規表現マッチを行いたい(今回のケース)

検索ワード:「PHP 正規表現 複数回 マッチ」
検索結果: http://bit.ly/13OePcw
「複数回」を「繰り返し」に変換して検索してくれるGoogle先生すごい(笑)


あと個人的には「<w1>文字列<w2>」よりも「<word>文字列</word>」のほうがいい気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
マニュアルの説明まで書いていただき、大変助かります。
先に回答いただいた方にも指摘されましたとおり調査不足でした。
お手数おかけしました。またよろしくお願い致します。

お礼日時:2013/03/11 09:08

マニュアルを読んでいれば、preg_matchの項に



preg_match_all() - 繰り返し正規表現検索を行う

という記述に気付くと思います(使い方はマニュアルを読んでください)。

http://www.php.net/manual/ja/function.preg-match …
http://www.php.net/manual/ja/function.preg-match …
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます!
マニュアルを確認しました。
確かにこれで対応できそうですね。

お礼日時:2013/03/11 09:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!