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 件のコメント:
コメントを投稿