• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP:preg_match_allで複数条件指定)

PHPのpreg_match_allで複数条件指定の方法とは?

このQ&Aのポイント
  • PHPのpreg_match_allを使用して複数条件を指定する方法について教えてください。
  • 具体的には、HTMLソースを分解してMySQLに登録する際に、aタグの中身を4つに分解する方法を知りたいです。
  • また、ループ処理を使用して一行ずつMySQLに登録する方法も教えてください。

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

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

こんな感じでどうでしょ? <?PHP $contents='<a href="1000/23">1: 【国語】接続後について (授業1) (20)</a><a href="1000/26">2: 【数学】分数 (206)</a>'; $pattern='/<a href="(.*?)">(\d)+:(.*?)\((\d+)\)<\/a>/mis'; if(preg_match_all($pattern , $contents, $matches,PREG_SET_ORDER )){ foreach($matches as $match){ $sql ="INSERT IGNORE INTO テーブル (`url`,`num`,`title`,`res`) VALUES("; $sql.= "'".mysql_real_escape_string($match[1])."'"; $sql.=",'".mysql_real_escape_string($match[2])."'"; $sql.=",'".mysql_real_escape_string($match[3])."'"; $sql.=",'".mysql_real_escape_string($match[4])."')";; print $sql."<br>\n"; } }; ?>

hpmt28
質問者

お礼

$pattern='/<a href="(.*?)">(\d)+:(.*?)\((\d+)\)<\/a>/mis'; の部分を自分で書き換えてみたところ希望通りの動作となりました。 ありがとうございました。

hpmt28
質問者

補足

yambejpさん。 回答ありがとうございます。 条件設定の()内が順番に配列に入るというやり方があるんですね。 勉強になります! 上記ソースを実行してみましたが 結果が INSERT IGNORE INTO テーブル (`url`,`num`,`title`,`res`) VALUES('','','','') INSERT IGNORE INTO テーブル (`url`,`num`,`title`,`res`) VALUES('','','','') という形でVALUESの部分に何も表示されません。 お手数ですがもう一度ソースの確認お願いできますでしょうか? あと、 $pattern='/<a href="(.*?)">(\d)+:(.*?)\((\d+)\)<\/a>/mis'; の最後のmisの意味ですが、 m →文字列を複数行として扱う。 i →大文字と小文字を区別しない。 s →文字列を単一行として扱う。 という個々の意味はわかるのですが、 mとsを記載するということは 「文字列を複数行として扱う。」「文字列を単一行として扱う。」となり、文字列を「単一行としても複数行としても扱う」という理解でよろしいのでしょうか? misをsimと順序を入れ替えると結果が変わったりするものなのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A