[PHP-users 24172] HTMLタグ内文字列の取り出し方

umemura umemura @ shinyoko.ricoh.co.jp
2005年 1月 19日 (水) 09:22:46 JST


初めて質問させて頂きます。
動作環境 Windows2000+Apache1.3.23+PHP4.1.2+PeraDB+MySQL3.23.49で
英語記述のHTMLソースファイル中の文字列を指定された言語に置き換える物を作成中です

置き換え条件
HTMLテーブル内の特定CSSクラス名に対し、表示可能文字列がある場合、該当個所を置き
換える。

例:<TD align=left class=top colSpan=3 vAlign=bottom width=468>対象文字列</TD>

対象文字列には./*()等も含まれている場合もあります。
また 対象文字列中に:(コロン)/(スラッシュ)、(ピリオド)-(ハイフン)があっ
た場合
その記号を区切りとした文字列に分解し辞書DBを参照して各文字列を置き換える
例:Abcd efg Hijklmn この場合は全部置き換え対象です。
  :Abc efg/Opqr stu この場合、Abc efgとOpqr stuと二つの文字列が置き換え対象で
す。

まずは該当文字列を抽出するために下記コードを書きました。
function read_file($filepath){
    $fd = fopen($filepath, "r");
    $content = fread($fd, filesize($filepath));
    fclose($fd);
    return $content;
}
$curPath="読込先ディレクトリパス";
$d=dir($curPath);
while($entry=$d->read()){
 if($entry!="." && $entry!=".."){
  $filepath=$curPath."/".$entry;
  if(!is_dir($filepath)){
   $content=read_file($filepath);
   preg_match_all("/([<TD]([\w]+)[^>]*\b[class=top]\b.*?)>(.*)(<\/\\2>)/" ,
$content,$keywords);
//debuglib.phpsを使っています。
   show_vars();
   break; //とりあえず1ファイルだけ
  }
 }
}
結果:
配列 $keywords には該当文字列が有るものの、他の要素にもかなりマッチしてしまいま
した
もう少し絞り込みたいのですが、上記パターンの

([<TD]([\w]+)[^>]*\b[class=top]\b.*?>)は<TD 〜 > までにマッチ
(.*)が対象文字列、
(<\/\\2>)はタグの終わりにマッチ
([\w]+)はタグ名のみにマッチした物と解釈していますが、合っていますでしょうか? 
^^;;

また、複数行にわたった記述をしてある場合にマッチさせるにはどうすればよいのでしょ
うか?
例:<TD align=left class=top colSpan=3 vAlign=bottom width=468>
 対象文字列
 </TD>
のような場合。

対象文字列のみを取り出すに何か過不足が有ると思うのですが解りません。
何方かご教授願えませんでしょうか、宜しくお願いします。

====================================================
送信者:           梅 村@勤務先 でした。
連絡先 自 宅 :umekof @ nifty..com  
           仕事先:umemura @ shinyoko.ricoh.co.jp
====================================================



PHP-users メーリングリストの案内