preg_match_allで複数条件を設定する方法についてお尋ねします。
環境
PHP:5.1.6
MySQL:5.0.77
--------ソース例------------------------------------------
<a href="1000/23">1: 【国語】接続後について (授業1) (20)</a>
<a href="1000/26">2: 【数学】分数 (206)</a>
---------------------------------------------------------
上記のようなHTMLソースを分解してMySQLに登録することを考えています。
(1行目)
1000/23 | 1 | 【国語】接続後について (授業1) | 20
(2行目)
1000/26 | 2 | 【数学】分数 | 206
という形に
a hrefの中身 |スレッド番号 | タイトル | コメント数
4つに分解してMySQLに登録します。
正規表現を学んで、個別にデータを取り出すことはできました。
以下に作成したソースを記載します。
$contents='<a href="1000/23">1: 【国語】接続後について (授業1) (20)</a><a href="1000/26">2: 【数学】分数 (206)</a>';
preg_match_all( '/<a href="(.*?)">/su', $contents, $match );
foreach ( $match[ 1 ] as $var )
{
echo htmlspecialchars($var)."<br>";
}
preg_match_all( '/">([0-9]*?):/su', $contents, $match2 );
foreach ( $match2[ 1 ] as $var2 )
{
echo htmlspecialchars($var2)."■<br>";
}
preg_match_all( '/[0-9]: (.*?)\([0-9]*\)<\/a>/su', $contents, $match3 );
foreach ( $match3[ 1 ] as $var3 )
{
echo htmlspecialchars($var3)."■<br>";
}
preg_match_all( '/\(([0-9]*?)\)</su', $contents, $match4 );
foreach ( $match4[ 1 ] as $var4 )
{
echo htmlspecialchars($var4)."●<br>";
}
【実行結果】
1000/23
1000/26
1
2
【国語】接続後について (授業1)
【数学】分数
20
206
1行ずつMySQLに登録したいので
preg_match_all( '/条件1,条件2,条件3,条件4/su', $contents, $match );
のような形で指定して個々の値を下記の変数に入れることは可能でしょうか?
ループ処理開始{
$url $num $title $res
//MySQLに接続
//データ登録
}
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";
}
};
?>
この回答への補足
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と順序を入れ替えると結果が変わったりするものなのでしょうか?
$pattern='/<a href="(.*?)">(\d)+:(.*?)\((\d+)\)<\/a>/mis';
の部分を自分で書き換えてみたところ希望通りの動作となりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- Visual Basic(VBA) ExcelVBAで、型が一致しませんのエラーについて 3 2023/06/20 09:51
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- その他(プログラミング・Web制作) awkの正規表現での最左最短マッチング 3 2022/07/01 00:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現での英字+ハイフンの...
-
Excelで数字のみを2倍3倍にする...
-
PHPで あるフォルダ内の、特定...
-
phpでhtmlソースを解析し、文字...
-
preg_matchでのマッチが正しく...
-
PHPの「ereg」って何の略で...
-
PHPで変数から1行目だけを取得...
-
正規表現で…
-
「半角数字」と「+」を許可する...
-
正規表現 先頭一桁をマッチさせ...
-
VBAのコマンドボタンの文字列の...
-
テキストファイルから改行コー...
-
C++で空Enterの入力を判...
-
csobjというタグについて
-
LaTeX: captionの中で改行した...
-
VC++ マルチバイト文字とUniCod...
-
JAVA System.out.println の ...
-
fgetsとsscanf
-
エスケープ文字の復帰(¥r)と...
-
VBAでCSVをExcelに取り込む時に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを使ってHTMLソースから特定...
-
、"(ダブルクォーテーション)...
-
preg_matchでエラーが出ます。
-
PHPで変数から1行目だけを取得...
-
PHPの「ereg」って何の略で...
-
PHPの正規表現で住所を分けるに...
-
PHPで あるフォルダ内の、特定...
-
Excelで数字のみを2倍3倍にする...
-
正規表現で「0」のみ抽出
-
PHPで<a>タグ内からURLと文字を...
-
住所から特定の文字列、数値を...
-
正規表現で、半角大文字と半角...
-
正規表現で特定のHTMLタグのク...
-
正規表現でシングルクォーテー...
-
正規表現パターンの記入方法に...
-
Smartyで部分一致
-
preg_matchでのマッチが正しく...
-
正規表現を使いimgタグ内から幅...
-
PHPメールフォーム URLと半角...
-
電話番号のチェック ハイフン...
おすすめ情報