- ベストアンサー
テキストから特定の文字列をすべて抽出する方法
- テキストから特定の文字列を抽出する方法について教えてください。目的の文字列の前後に<w1>~<w2>を付けておき、その範囲の文字列を検索して取得する方法が知りたいです。
- <w1>~<w2>を使用して複数の目的の文字列を抽出する方法を教えてください。現在の処理では、テキストに2つ以上の<w1>~<w2>がある場合、全てを抽出できない状況です。
- 質問者はプログラミング(php)を始めて半年ほどで、抽出処理の方法を学びたいとしています。抽出処理の部分について、ご教授いただけるとありがたいです。
- みんなの回答 (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>」のほうがいい気がします。
その他の回答 (1)
- agunuz
- ベストアンサー率65% (288/438)
マニュアルを読んでいれば、preg_matchの項に preg_match_all() - 繰り返し正規表現検索を行う という記述に気付くと思います(使い方はマニュアルを読んでください)。 http://www.php.net/manual/ja/function.preg-match.php http://www.php.net/manual/ja/function.preg-match-all.php
お礼
早速のご回答ありがとうございます! マニュアルを確認しました。 確かにこれで対応できそうですね。
お礼
ご回答ありがとうございます! マニュアルの説明まで書いていただき、大変助かります。 先に回答いただいた方にも指摘されましたとおり調査不足でした。 お手数おかけしました。またよろしくお願い致します。