Code IQでHTMLのスクレイピングの問題が出ていたので、PHPで書いてみた。
課題はクリアできなく、振り返りです。
<?php $input = trim(fgets(STDIN) ) ; $th = array(); $td = array(); while ( $input ) { // echo $input . "\n"; preg_match('/^<th>(.*)<\/th>$/', $input, $match_th); preg_match('/^<td>(.*)<\/td>$/', $input, $match_td); // var_dump($match); if ($match_th ) $th[] = preg_replace('/<\w*>/', '' , $match_th[1] ); if ($match_td ) $td[] = preg_replace('/<\/?\w*>/', '' , $match_td[1] ); $input = trim(fgets(STDIN) ) ; } printCsv($th); printCsv($td); function printCsv($array) { foreach ($array as $key => $var ) { echo "\"" . $var . "\""; if ( $key < count($array) -1 ) { echo ","; } else { echo "\n"; } } } function e($target){ return htmlspecialchars($target, ENT_QUOTES); } ?>
メモ
- trim(fgets(STDIN) )
- 標準入力の読み込みと両端スペースの消去
- preg_match(regex_str or regex_array, str or array, $store);
-
パターンマッチした行とグループ化した部分を$storeに格納する
- preg_replace(regex_str, inserted_str , target_str );
-
target_str内でregex_strに対応する部分をinserted_strに置き換える。
preg_matchと同様にregex_strとinserted_strは配列でも構わない - count($array)
-
PHPの配列の要素数のカウントを思い出せずググった次第です -
- foreach ($array as $key => $var ) {
-
同じく - htmlspecialchars($target, ENT_QUOTES);
-
同じく - fputcsv(output , array [, delimitter[, enclosure[, escape_char] ] ] )
-
配列をcsvで出力する
enclosureがつくルールがわからず、今回は使えず
0 件のコメント:
コメントを投稿