皆様、平素よりお世話になっております。
「<div class="en_text">と<br />に囲われた英語の文章」だけを除外して表示したいのですが、以下のように自分なりのコードを書いてみたのですが、どうしても実現できません。
php
1ini_set('display_errors',1); 2header("Content-Type: text/html; charset=UTF-8");//文字化け防止 3 4 5require_once('phpQuery.php'); //phpQueryというモジュールを使う 6 7// HTMLデータを取得する 8$html = file_get_contents('http://www.meigensyu.com/quotations/index/page1.html'); //ターゲットのURL 9 10// HTMLをオブジェクトとして扱う 11$doc = phpQuery::newDocument($html); 12$messages= $doc['div.text']; //これだけでトリミングしたい要素が<html><header><body>付きで代入される 13 14preg_match_all('|<div class="text">(.*)(</div>)|', $messages, $match); //$matchは<div>だけのきれいな配列になる。 15 16/*$matchの「$match[0]にはHTML要素付き」、「$match[1]には平文」が入る。 17平文の文章を抽出したい場合は$match[1][0]からのスタートになる*/ 18$singulerExpression = '<div class="text">'; //名言の入っている要素を指定 19$singulerExpression_noEng ='|<div class="text">(.*)(<br />)|'; 20 21for($i=0;$i<count($match[1]);$i++){ 22 if(!preg_match($singulerExpression, $match[1][$i])){ 23 if(!preg_match($singulerExpression_noEng,$match[1][$i])) 24 echo $match[1][$i].'<br/>'; 25 } 26}
出力部分を以下のようにしても同じ出力結果でした。
php
1for($i=0;$i<count($match[1]);$i++){ 2 echo preg_replace('|<div class="en_text">.*<br />|', '', $match[1][$i]).'<br />'; 3}
上記の出力結果
html
1 2人間はひとくきの葦にすぎない。自然の中で最も弱いものである。だが、それは考える葦である。<div class="en_text">Human being is a reed of one stalk. It is the weakest existence naturally. However , it is a thinking reed .<br/>その日その日が一年中の最善の日である。<br/>チャンスは貯蓄できない。<br/>希望さえあればどんな所にでも たどりつけると決心している。<br/>死者にたいする最高の手向けは、悲しみではなく感謝だ。<br/>人生は道路のようなものだ。 一番の近道は、たいてい一番悪い道だ。<br/>世の中は、君の理解する以上に栄光に満ちている。<br/>人付き合いがうまいというのは、人を許せるということだ。<br/>生きるとは呼吸することではない。行動することだ。<br/>人生は学校である。 そこでは幸福より不幸の方が良い教師である。<br/>若い女は美しい。しかし、老いた女はもっと美しい。<br/>今日という日は、残りの人生の最初の一日。<br/>卵を割らなければ、オムレツは作れない。<div class="en_text">You can't make omelet without breaking eggs.<br/>至上の処世術は、 妥協することなく適応することである。<br/>人間、志を立てるのに遅すぎるということはない。<br/>太陽が輝くかぎり、希望もまた輝く。<br/>行動は必ずしも幸福をもたらさないかも知れないが、 行動のない所に、幸福は、生まれない。<br/>成し遂げんとした志をただ一回の敗北によって捨ててはいけない。<br/>
私の正規表現の書き方か、ロジックに間違えがあると思います。どうかアドバイスやご指摘のほどをお願いいたします。
以上です。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー