![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
例えば、「今年のホワイトデーにはお菓子の詰合せを贈ろうと思う。」というテキストファイルがあり、このテキストの『ホワイトデー』と『お菓子』という文字列を抽出し、その文字列に対して外部リンクを設定してページに表示させる場合の処理について、教えていただきたいです。
まず目的の文字列の前後には<w1>~<w2>という文字を付けておき、
文字列中から<w1>~<w2>を検索してその値を返そうとしています。
$str="今年のホワイトデーにはお菓子の詰合せを贈ろうと思う。";
preg_match('/<w1>(.*?)<w2>/is', $str, $keyword);
この処理でいけば、マッチした文字列が$keywordに代入されます。
しかし、テキストに2つ以上の<w1>~<w2>がある場合、
そのすべてを抽出することができません。
プログラミング(php)は始めてまだ半年ぐらいなので、まだまだ初歩のレベルです。
どなたかこの抽出処理の部分についてご教授いただけますでしょうか?
よろしくお願い致します。
No.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>」のほうがいい気がします。
ご回答ありがとうございます!
マニュアルの説明まで書いていただき、大変助かります。
先に回答いただいた方にも指摘されましたとおり調査不足でした。
お手数おかけしました。またよろしくお願い致します。
No.1
- 回答日時:
マニュアルを読んでいれば、preg_matchの項に
preg_match_all() - 繰り返し正規表現検索を行う
という記述に気付くと思います(使い方はマニュアルを読んでください)。
http://www.php.net/manual/ja/function.preg-match …
http://www.php.net/manual/ja/function.preg-match …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Java Java 南京錠 2 2023/02/04 11:46
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
、"(ダブルクォーテーション)...
-
VBAのコマンドボタンの文字列の...
-
文字の入力で横バー上段、中断...
-
ソースコードの1行が長いとき...
-
改行について
-
データベースにデータを挿入す...
-
選択したセルでダブルクリック...
-
VBSのADODB.Streamで先頭に「追...
-
【VBA】エクセルで最後の不要な...
-
fscanfについて
-
ExcelVBAでメールを作成してメ...
-
全角、半角、改行コードが混在...
-
全角英数文字が嫌われる理由を...
-
テキストファイルから改行コー...
-
JavaMail,本文中の改行について
-
改行を読み飛ばす
-
カンマの含まれる文字列の数値...
-
マクロでセル内の改行を削除す...
-
「続行するには何かキーを押し...
-
エスケープ文字の復帰(¥r)と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
、"(ダブルクォーテーション)...
-
VBAを使ってHTMLソースから特定...
-
PHPで変数から1行目だけを取得...
-
Excelで数字のみを2倍3倍にする...
-
preg_matchでエラーが出ます。
-
正規表現でシングルクォーテー...
-
URLを抽出する正規表現
-
正規表現パターンの記入方法に...
-
PHPで<a>タグ内からURLと文字を...
-
PHP 複数行の正規表現
-
PHPの正規表現で住所を分けるに...
-
電話番号のチェック ハイフン...
-
ereg_match関数について
-
正規表現で「0」のみ抽出
-
PHPメールフォーム URLと半角...
-
preg_matchで Warning: Undefin...
-
phpでメールアドレス入力の入力...
-
正規表現で特定のHTMLタグのク...
-
preg_matchで指定ファイルのタ...
-
変数に指定文字列が含まれると...
おすすめ情報